JSON for java入門總結

openkk 12年前發布 | 96K 次閱讀 JSON JSON開發包


一、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數據結構


JSON有兩種數據結構:

(1)Map,也稱為對象;{....}

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

也就是說所有的JSON對象都是要以這些形式表示;

 

1.Map


簡單的說就是Java中的Map,名稱-值對的形式給出,名稱和值之間用“:”隔開,兩個Map之間用“,”隔開,一般表示形式如下:

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

以下為官網的圖:

JSON for java入門總結

 

2.Array


就是普通意義上的數組,一般形式如下:

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

以下為官網的圖:

 

JSON for java入門總結

 

圖中的value可以是:

 

JSON for java入門總結

 

 

總結:

(1)JSON的數據結構只有兩種;

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

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

 

三、JSON與XML互轉示例


前面提到任何的XML都能夠轉換成JSON包;

 

1.簡單XML


XML格式:

<person>
    <name>xiazdong</name>
    <age>20</age>
</person>

JSON格式:

{
    "name":"xiazdong",
    "age":20
}


 

2.復雜XML


XML格式:

<section>
    <title>BOOK</title>
    <signing>
        <author name="author-1"/>
        <book title="book1" price="$11"/>
    </signing>
    <signing>
        <author name="author-2"/>
        <book title="book2" price="$22"/>
    </signing>
</section>

JSON格式:

"section":{
        "title":"BOOK",
        "signing":[
        {
      "author":
            {
                "name":"author-1"
            },
            "book":
            {
                "title":"book1",
                "price":"$11"
            }
        },
        {
            "author":
            {
                "name":"author-2"
            },
            "book":
            {
                "title":"book2",
                "price":"$22"
            }
        }     ]}
    }

注意:XML中的屬性也是通過JSON的Map表示;

 

四、JSON包


如果我們想要使用JSON包,則可以下載JSON包的源代碼,并將這些代碼添加進Eclipse工程中,即可調用;

如果想要看API文檔,可以參見:http://www.JSON.org/java/index.html

JSON包中最常用的兩個類就是JSONObject和JSONArray,分別表示兩種數據結構;

 

1.JSONObject代碼實例


package com.xiazdong.json;

import weibo4j.org.json.JSONArray;
import weibo4j.org.json.JSONObject;

public class Test {

    public static void main(String[] args) throws Exception{
        JSONObject jsonobj = new JSONObject("{'name':'xiazdong','age':20}");
        String name = jsonobj.getString("name");
        int age = jsonobj.getInt("age");
        System.out.println(name+":"+age);   

    }
}

2.JSONArray代碼實例


package com.xiazdong.json;

import weibo4j.org.json.JSONArray;
import weibo4j.org.json.JSONObject;

public class Test {

    public static void main(String[] args) throws Exception{

        JSONArray jsonarray = new JSONArray("[{'name':'xiazdong','age':20},{'name':'xzdong','age':15}]");
        for(int i=0;i<jsonarray.length();i++){
            String name = jsonarray.getJSONObject(i).getString("name");
            int age = jsonarray.getJSONObject(i).getInt("age");
            System.out.println("name="+name);
            System.out.println("age="+age);
        }

    }
}

3.嵌套JSONObject和JSONArray代碼實例


package com.xiazdong.json;

import weibo4j.org.json.JSONArray;
import weibo4j.org.json.JSONObject;

public class Test {

    public static void main(String[] args) throws Exception{

        String str = "{'name':'xiazdong','age':20,'book':['book1','book2']";
        JSONObject obj = new JSONObject(str);
        System.out.println(obj.getJSONArray("book").getString(0));
    }
}

 

4.JSONStringer代碼示例


JSONStringer可以用來快速構建一個JSON格式的文本,并轉換成String,可以寫入文件;

JSONStringer是JSONWriter的子類;

JSONStringer一般通過object().key().value().key().value().endObject()進行構造;

object()表明開始一個對象,即添加{  ;

endObject()表明結束一個對象,即添加 } ;

array()表明開始一個數組,即添加一個 [ ;

endArray()表明結束一個數組,即添加一個 ] ;

key()表示添加一個key;

value()表示添加一個value;

package com.xiazdong.json;

import weibo4j.org.json.JSONStringer;

public class JsonStringerDemo {

    public static void main(String[] args) throws Exception{
        JSONStringer stringer = new JSONStringer();
        String str = stringer.object().key("name").value("xiazdong").key("age").value(20).endObject().toString();
        System.out.println(str);
    }

}

復雜JSON格式寫入

package com.xiazdong.json;

import java.io.File;
import java.io.FileReader;

import weibo4j.org.json.JSONArray;
import weibo4j.org.json.JSONObject;
import weibo4j.org.json.JSONStringer;
import weibo4j.org.json.JSONTokener;

public class JsonStringerDemo {

    public static void main(String[] args) throws Exception{

        JSONStringer js = new JSONStringer();
        JSONObject obj2 = new JSONObject();
        JSONObject obj3 = new JSONObject();
        JSONObject obj4 = new JSONObject();
        obj4.put("title", "book1").put("price", "$11");
        obj3.put("book", obj4);
        obj3.put("author", new JSONObject().put("name", "author-1"));

        JSONObject obj5 = new JSONObject();
        JSONObject obj6 = new JSONObject();
        obj6.put("title", "book2").put("price", "$22");
        obj5.put("book", obj6);
        obj5.put("author", new JSONObject().put("name", "author-2"));

        JSONArray obj7 = new JSONArray();
        obj7.put(obj3).put(obj5);



        obj2.put("title","BOOK");
        obj2.put("signing", obj7);

        js.object().key("session").value(obj2).endObject();

        System.out.println(js.toString());

        PrintWriter out = new PrintWriter(new FileOutputStream(1.txt));
        out.println(js.toString());


    }

}


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

{"section":{
        "title":"BOOK",
        "signing":[
        {
            "author":
            {
                "name":"author-1"
            },
            "book":
            {
                "title":"book1",
                "price":"$11"
            }
        },
        {
            "author":
            {
                "name":"author-2"
            },
            "book":
            {
                "title":"book2",
                "price":"$22"
            }
        }   
        ]}
    }
}


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

{
    'name':'xiazdong',
    'book':['book1','book2']
}

 

package com.xiazdong.json;

import java.io.File;
import java.io.FileReader;

import weibo4j.org.json.JSONObject;
import weibo4j.org.json.JSONTokener;

public class JsonStringerDemo {

    public static void main(String[] args) throws Exception{
        JSONObject obj = new JSONObject(new JSONTokener(new FileReader(new File("1.txt"))));
        System.out.println(obj.getJSONArray("book").getString(1)); //可以讀取book2
    }

}

復雜JSON格式的讀取代碼:

1.txt

{"section":{
        "title":"BOOK",
        "signing":[
        {
            "author":
            {
                "name":"author-1"
            },
            "book":
            {
                "title":"book1",
                "price":"$11"
            }
        },
        {
            "author":
            {
                "name":"author-2"
            },
            "book":
            {
                "title":"book2",
                "price":"$22"
            }
        }   
        ]}
    }
}

package com.xiazdong.json;

import java.io.File;
import java.io.FileReader;

import weibo4j.org.json.JSONObject;
import weibo4j.org.json.JSONTokener;

public class JsonStringerDemo {

    public static void main(String[] args) throws Exception{
        JSONObject obj = new JSONObject(new JSONTokener(new FileReader(new File("1.txt"))));
        System.out.println(obj.getJSONObject("section").getJSONArray("signing").getJSONObject(0).getJSONObject("author").getString("name"));         //獲取author-1
    }

}


總結:


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

2.利用JSONObject+JSONTokener能夠讀取JSON格式文件對象;

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

注:由于原本想要試圖用JSONWriter寫入,但是沒有成功;所以只能利用JSONStringer+PrintWriter寫入;


轉自:http://blog.csdn.net/xiazdong/article/details/7059573

 

 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!