您的位置:首页 > 编程语言 > Java开发

JSON for java入门总结

2016-06-22 20:42 507 查看


一、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'}

以下为官网的图:



 


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格式:

01
<
section
>
02
    
<
title
>BOOK</
title
>
03
    
<
signing
>
04
        
<
author
 
name
=
"author-1"
/>
05
        
<
book
 
title
=
"book1"
 
price
=
"$11"
/>
06
    
</
signing
>
07
    
<
signing
>
08
        
<
author
 
name
=
"author-2"
/>
09
        
<
book
 
title
=
"book2"
 
price
=
"$22"
/>
10
    
</
signing
>
11
</
section
>
JSON格式:

01
"section":{
02
        
"title":"BOOK",
03
        
"signing":[
04
        
{
05
    
<
span
 
style
=
"white-space:pre;"
>
</
span
> "author":
06
            
{
07
                
"name":"author-1"
08
            
},
09
            
"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
        
}  
<
span
 
style
=
"white-space:pre;"
>
</
span
> ]}
26
    
}
注意:XML中的属性也是通过JSON的Map表示;

 


四、JSON包

 

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

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

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

 


1.JSONObject代码实例

 

01
package
 
com.xiazdong.json;
02
 
03
import
 
weibo4j.org.json.JSONArray;
04
import
 
weibo4j.org.json.JSONObject;
05
 
06
public
 
class
 
Test
{
07
 
08
    
public
 
static
 
void
 
main(String[]
args)
throws
 
Exception{
09
        
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代码实例

 

01
package
 
com.xiazdong.json;
02
 
03
import
 
weibo4j.org.json.JSONArray;
04
import
 
weibo4j.org.json.JSONObject;
05
 
06
public
 
class
 
Test
{
07
 
08
    
public
 
static
 
void
 
main(String[]
args)
throws
 
Exception{
09
            
 
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代码实例

 

01
package
 
com.xiazdong.json;
02
 
03
import
 
weibo4j.org.json.JSONArray;
04
import
 
weibo4j.org.json.JSONObject;
05
 
06
public
 
class
 
Test
{
07
 
08
    
public
 
static
 
void
 
main(String[]
args)
throws
 
Exception{
09
 
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;

01
package
 
com.xiazdong.json;
02
 
03
import
 
weibo4j.org.json.JSONStringer;
04
 
05
public
 
class
 
JsonStringerDemo
{
06
 
07
    
public
 
static
 
void
 
main(String[]
args)
throws
 
Exception{
08
        
JSONStringer
stringer =
new
 
JSONStringer();
09
        
String
str =stringer.object().key(
"name"
).value(
"xiazdong"
).key(
"age"
).value(
20
).endObject().toString();
10
        
System.out.println(str);
11
    
}
12
 
13
}


复杂JSON格式写入

01
package
 
com.xiazdong.json;
02
 
03
import
 
java.io.File;
04
import
 
java.io.FileReader;
05
 
06
import
 
weibo4j.org.json.JSONArray;
07
import
 
weibo4j.org.json.JSONObject;
08
import
 
weibo4j.org.json.JSONStringer;
09
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格式:

01
{
"section"
:{
02
        
"title"
:
"BOOK"
,
03
        
"signing"
:[
04
        
{
05
            
"author"
:
06
            
{
07
                
"name"
:
"author-1"
08
            
},
09
            
"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
}
 

01
package
 
com.xiazdong.json;
02
 
03
import
 
java.io.File;
04
import
 
java.io.FileReader;
05
 
06
import
 
weibo4j.org.json.JSONObject;
07
import
 
weibo4j.org.json.JSONTokener;
08
 
09
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

01
{
"section"
:{
02
        
"title"
:
"BOOK"
,
03
        
"signing"
:[
04
        
{
05
            
"author"
:
06
            
{
07
                
"name"
:
"author-1"
08
            
},
09
            
"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
}
 

01
package
 
com.xiazdong.json;
02
 
03
import
 
java.io.File;
04
import
 
java.io.FileReader;
05
 
06
import
 
weibo4j.org.json.JSONObject;
07
import
 
weibo4j.org.json.JSONTokener;
08
 
09
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写入;

转自:http://blog.csdn.net/xiazdong/article/details/7059573
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: