注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

北漂的小羊

Java编程,开发者,程序员,软件开发,编程,代码。新浪微博号:IT国子监

 
 
 

日志

 
 
关于我

在这里是面向程序员的高品质IT技术学习社区,是程序员学习成长的地方。让我们更好地用技术改变世界。请关注新浪微博号: IT国子监(http://weibo.com/itguozijian)

网易考拉推荐

JSON总结- JSON与JAVA的数据转换实例  

2012-11-21 16:00:01|  分类: JAVA |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

摘要在异步应用程序中发送和接收信息时,可以选择以纯文本和 XML 作为数据格式。掌握 Ajax 的这一期讨论另一种有用的数据格式 JavaScript Object Notation(JSON),以及如何使用它更轻松地在应用程序中移动数据和对象。

一、JSON介绍

JSON (JavaScript Object Notation)一种简单的数据格式,比xml更轻巧。 JSON 是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON 数据不需要任何特殊的 API 或工具包。

JSON的规则很简单: 对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。


官网:http://www.json.org/

JSON是AJAX中的X(就是可以取代XML);          ------出自JSON创始人;


JSON有两种数据结构:

(1)Map,也称为对象;{'key1':'value1','key2':'value2'}

(2)Array;['arr1','arr2','arr3'];

也就是说所有的JSON对象都是要以这些形式表示;


二、JSON简单的例子


如果我们想要使用JSON包,则可以下载JSON包的源代码,并将这些代码添加进Eclipse工程中,即可调用;

如果想要看API文档,可以参见:http://www.JSON.org/java/index.html

JSON包中最常用的两个类就是JSONObject和JSONArray,分别表示两种数据结构;


1.JSONObject代码实例


  1. import net.sf.json.JSONArray;    
  2. import net.sf.json.JSONObject;    
  3.     
  4. public class Test {    
  5.     
  6.     public static void main(String[] args) throws Exception{    
  7.         JSONObject jsonobj = new JSONObject("{'name':'xiazdong','age':20}");    
  8.         String name = jsonobj.getString("name");    
  9.         int age = jsonobj.getInt("age");    
  10.         System.out.println(name+":"+age);       
  11.             
  12.     }    
  13. }   


2.JSONArray代码实例


JSONArray array = new JSONArray(String str);  //将String转为JSONArray

int length = array.length(); //返回Array的长度;

  1. import net.sf.json.JSONArray;    
  2. import net.sf.json.JSONObject;    
  3.     
  4. public class Test {    
  5.     
  6.     public static void main(String[] args) throws Exception{    
  7.                 
  8.         JSONArray jsonarray = new JSONArray("[{'name':'xiazdong','age':20},{'name':'xzdong','age':15}]");    
  9.         for(int i=0;i<jsonarray.length();i++){    
  10.             String name = jsonarray.getJSONObject(i).getString("name");    
  11.             int age = jsonarray.getJSONObject(i).getInt("age");    
  12.             System.out.println("name="+name);    
  13.             System.out.println("age="+age);    
  14.         }    
  15.             
  16.     }    
  17. }    

3.嵌套JSONObject和JSONArray代码实例   

    

  1. public class Test {
  2.     public static void main(String[] args) throws Exception{    
  3.     
  4.         String str = "{'name':'xiazdong','age':20,'book':['book1','book2']";    
  5.         JSONObject obj = new JSONObject(str);    
  6.         System.out.println(obj.getJSONArray("book").getString(0));    
  7.     }    
  8. }   


4.JSONStringer代码示例


JSONStringer可以用来快速构建一个JSON格式的文本,并转换成String,可以写入文件;

JSONStringer是JSONWriter的子类;

JSONStringer一般通过object().key().value().key().value().endObject()进行构造;

object()表明开始一个对象,即添加{  ;

endObject()表明结束一个对象,即添加 } ;

array()表明开始一个数组,即添加一个 [ ;

endArray()表明结束一个数组,即添加一个 ] ;

key()表示添加一个key;

value()表示添加一个value;


  1. public class JsonStringerDemo {    
  2.     
  3.     public static void main(String[] args) throws Exception{    
  4.         JSONStringer stringer = new JSONStringer();    
  5.         String str = stringer.object().key("name").value("xiazdong").key("age").value(20).endObject().toString();    
  6.         System.out.println(str);    
  7.     }    
  8.     
  9. }   


复杂JSON格式写入


  1. public class JsonStringerDemo {    
  2.     
  3.     public static void main(String[] args) throws Exception{    
  4.             
  5.         JSONStringer js = new JSONStringer();    
  6.         JSONObject obj2 = new JSONObject();    
  7.         JSONObject obj3 = new JSONObject();    
  8.         JSONObject obj4 = new JSONObject();    
  9.         obj4.put("title""book1").put("price""$11");    
  10.         obj3.put("book", obj4);    
  11.         obj3.put("author"new JSONObject().put("name""author-1"));    
  12.             
  13.         JSONObject obj5 = new JSONObject();    
  14.         JSONObject obj6 = new JSONObject();    
  15.         obj6.put("title""book2").put("price""$22");    
  16.         obj5.put("book", obj6);    
  17.         obj5.put("author"new JSONObject().put("name""author-2"));    
  18.             
  19.         JSONArray obj7 = new JSONArray();    
  20.         obj7.put(obj3).put(obj5);    
  21.             
  22.             
  23.             
  24.         obj2.put("title","BOOK");    
  25.         obj2.put("signing", obj7);    
  26.             
  27.         js.object().key("session").value(obj2).endObject();    
  28.             
  29.         System.out.println(js.toString());    
  30.             
  31.         PrintWriter out = new PrintWriter(new FileOutputStream(1.txt));    
  32.         out.println(js.toString());    
  33.             
  34.         
  35.     }    
  36.     



以上代码生成了如下JSON格式:


  1. {"section":{    
  2.         "title":"BOOK",    
  3.         "signing":[    
  4.         {    
  5.             "author":    
  6.             {    
  7.                 "name":"author-1"    
  8.             },    
  9.             "book":    
  10.             {    
  11.                 "title":"book1",    
  12.                 "price":"$11"    
  13.             }    
  14.         },    
  15.         {    
  16.             "author":    
  17.             {    
  18.                 "name":"author-2"    
  19.             },    
  20.             "book":    
  21.             {    
  22.                 "title":"book2",    
  23.                 "price":"$22"    
  24.             }    
  25.         }       
  26.         ]}    
  27.     }    
  28. }    



5.JSONTokener代码示例


JSONTokener是用来读取JSON格式的文件;

JSONObject obj = new JSONObject( new JSONTokener(java.io.Reader));可以从文件中读取一个JSONObject;

JSONArray obj = new JSONArray( new JSONTokener(java.io.Reader)); 可以从文件中读取一个JSONArray;



  1. public class JsonStringerDemo {    
  2.     
  3.     public static void main(String[] args) throws Exception{    
  4.         JSONObject obj = new JSONObject(new JSONTokener(new FileReader(new File("1.txt"))));    
  5.         System.out.println(obj.getJSONArray("book").getString(1)); //可以读取book2    
  6.     }    
  7.     
  8. }    

 

 

复杂JSON格式的读取代码:


  1. {"section":{    
  2.         "title":"BOOK",    
  3.         "signing":[    
  4.         {    
  5.             "author":    
  6.             {    
  7.                 "name":"author-1"    
  8.             },    
  9.             "book":    
  10.             {    
  11.                 "title":"book1",    
  12.                 "price":"$11"    
  13.             }    
  14.         },    
  15.         {    
  16.             "author":    
  17.             {    
  18.                 "name":"author-2"    
  19.             },    
  20.             "book":    
  21.             {    
  22.                 "title":"book2",    
  23.                 "price":"$22"    
  24.             }    
  25.         }       
  26.         ]}    
  27.     }    
  28. }    

 

 


  1. public class JsonStringerDemo {    
  2.     
  3.     public static void main(String[] args) throws Exception{    
  4.         JSONObject obj = new JSONObject(new JSONTokener(new FileReader(new File("1.txt"))));    
  5.         System.out.println(obj.getJSONObject("section").getJSONArray("signing").getJSONObject(0).getJSONObject("author").getString("name")); <span style="white-space:pre">     </span>//获取author-1    
  6.     }    
  7.     
  8. }    


三、JSON总结


1在Java中JSON格式的String最好用单引号表示;

2.利用JSONObject+JSONTokener能够读取JSON格式文件对象;

3.利用PrintWriter+JSONStringer可以写入JSON文件;


四、JSON参考资料


http://www.json.org/js.html

http://www.json.org/

http://www.prototypejs.org/learn/json

http://www.json.org/java/index.html

http://www.ibm.com/developerworks/cn/web/wa-ajaxintro10/index.html

(天涯草/文)

本文如需转载,并注明出自天涯草网易博客


  评论这张
 
阅读(4015)| 评论(2)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016