zoukankan      html  css  js  c++  java
  • [转] JSON for java入门总结

    一、JSON介绍


    JSON(JavaScript Object Notation),类似于XML,是一种数据交换格式,比如JAVA产生了一个数据想要给JavaScript,则除了利用XML外,还可以利用JSON;

    JSON相比XML的优势是表达起来很简单;

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

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


    注意:JSON并不是一个文档格式,没有*.json的文档,一般JSON格式的文档存在txt中,而XML可以是一个标准;


    在线校验JSON结构的网站:http://www.bejson.com/go.html?u=http://www.bejson.com/jsonview2/


    二、JSON数据结构


    JSON有两种数据结构:

    (1)Map,也称为对象;{....}

    (2)Array;[......]

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


    1.Map


    简单的说就是Java中的Map,名称-值对的形式给出,名称和值之间用“:”隔开,两个Map之间用“,”隔开,一般表示形式如下:

    {'key1':'value1','key2':'value2'}

    以下为官网的图:



    2.Array


    就是普通意义上的数组,一般形式如下:

    ['arr1','arr2','arr3'];

    以下为官网的图:



    图中的value可以是:





    总结:

    (1)JSON的数据结构只有两种;

    (2)可以嵌套表示,比如Array中可以嵌套Object等;

    (3)记住:Object是以{}表示,Array是以[  ]表示;

    三、JSON与XML互转示例


    前面提到任何的XML都能够转换成JSON包;


    1.简单XML


    XML格式:

    1. <person>  
    2.     <name>xiazdong</name>  
    3.     <age>20</age>  
    4. </person>  

    JSON格式:

    1. {  
    2.     "name":"xiazdong",  
    3.     "age":20  
    4. }  



    2.复杂XML


    XML格式:

    1. <section>  
    2.     <title>BOOK</title>  
    3.     <signing>  
    4.         <author name="author-1"/>  
    5.         <book title="book1" price="$11"/>  
    6.     </signing>  
    7.     <signing>  
    8.         <author name="author-2"/>  
    9.         <book title="book2" price="$22"/>  
    10.     </signing>  
    11. </section>  


    JSON格式:

    1. "section":{  
    2.         "title":"BOOK",  
    3.         "signing":[  
    4.         {  
    5.     <span style="white-space:pre">  </span> "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. <span style="white-space:pre">  </span> ]}  
    27.     }  


    注意:XML中的属性也是通过JSON的Map表示;


    四、JSON包


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

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

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


    1.JSONObject代码实例


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

    2.JSONArray代码实例


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

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

    3.嵌套JSONObject和JSONArray代码实例


    1. package com.xiazdong.json;  
    2.   
    3. import weibo4j.org.json.JSONArray;  
    4. import weibo4j.org.json.JSONObject;  
    5.   
    6. public class Test {  
    7.   
    8.     public static void main(String[] args) throws Exception{  
    9.   
    10.         String str = "{'name':'xiazdong','age':20,'book':['book1','book2']";  
    11.         JSONObject obj = new JSONObject(str);  
    12.         System.out.println(obj.getJSONArray("book").getString(0));  
    13.     }  
    14. }  


    4.JSONStringer代码示例


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

    JSONStringer是JSONWriter的子类;

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

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

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

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

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

    key()表示添加一个key;

    value()表示添加一个value;

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

    复杂JSON格式写入

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


    以上代码生成了如下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.txt

    1. {  
    2.     'name':'xiazdong',  
    3.     'book':['book1','book2']  
    4. }  


    1. package com.xiazdong.json;  
    2.   
    3. import java.io.File;  
    4. import java.io.FileReader;  
    5.   
    6. import weibo4j.org.json.JSONObject;  
    7. import weibo4j.org.json.JSONTokener;  
    8.   
    9. public class JsonStringerDemo {  
    10.   
    11.     public static void main(String[] args) throws Exception{  
    12.         JSONObject obj = new JSONObject(new JSONTokener(new FileReader(new File("1.txt"))));  
    13.         System.out.println(obj.getJSONArray("book").getString(1)); //可以读取book2  
    14.     }  
    15.   
    16. }  

    复杂JSON格式的读取代码:

    1.txt

    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. package com.xiazdong.json;  
    2.   
    3. import java.io.File;  
    4. import java.io.FileReader;  
    5.   
    6. import weibo4j.org.json.JSONObject;  
    7. import weibo4j.org.json.JSONTokener;  
    8.   
    9. public class JsonStringerDemo {  
    10.   
    11.     public static void main(String[] args) throws Exception{  
    12.         JSONObject obj = new JSONObject(new JSONTokener(new FileReader(new File("1.txt"))));  
    13.         System.out.println(obj.getJSONObject("section").getJSONArray("signing").getJSONObject(0).getJSONObject("author").getString("name")); <span style="white-space:pre">     </span>//获取author-1  
    14.     }  
    15.   
    16. }  


    总结:


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

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

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

    注:由于原本想要试图用JSONWriter写入,但是没有成功;所以只能利用JSONStringer+PrintWriter写入;

  • 相关阅读:
    WPF Caliburn 学习笔记(五)HelloCaliburn
    MSDN 教程短片 WPF 20(绑定3ObjectDataProvider)
    MSDN 教程短片 WPF 23(3D动画)
    比赛总结一
    HDU3686 Traffic Real Time Query System
    HDU3954 Level up
    EOJ382 Match Maker
    UESTC1565 Smart Typist
    HDU3578 Greedy Tino
    ZOJ1975 The Sierpinski Fractal
  • 原文地址:https://www.cnblogs.com/qiangxia/p/4447659.html
Copyright © 2011-2022 走看看