JSON定义
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(网络传输速率)。
JSON用途
-
使用基于JavaScript的应用程序,其中包括浏览器扩展和网站
-
使用JSON格式序列化和结构化的数据传输网络连接
-
这主要用于服务器和Web应用程序之间的数据传输
-
Web服务和API采用JSON格式提供公共数据
-
它可以用来与现代编程语言
JSON的特点
-
易于读写JSON
-
轻量级的基于文本的交换格式
-
独立语言
JSON 语法规则
-
数据在键值对中
-
数据由逗号分隔
-
花括号保存对象
-
方括号保存数组
JSON 名称/值对
1
|
{ "firstName" : "Brett" , "lastName" : "McLaughlin" , "email" : "aaaa" }
|
JSON格式支持的数据类型有以下:
类型 | 描述 |
---|---|
Number | 在JavaScript中的双精度浮点格式 |
String | 双引号的反斜杠转义的Unicode |
Boolean | true 或 false |
Array | 值的有序序列 |
Value | 它可以是一个字符串,一个数字,真的还是假(true/false),空(null )等 |
Object | 无序集合键值对 |
Whitespace | 可以使用任何一对中的令牌 |
null | empty |
以下转自:易百教程网
JSON和Java实体之间的映射
JSON.simple实体映射从左侧向右侧解码或解析,并映射实体从右侧到左侧编码。
JSON | Java |
---|---|
string | java.lang.String |
number | java.lang.Number |
true|false | ava.lang.Boolean |
null | null |
array | java.util.List |
object | java.util.Map |
虽然解码,默认 java.util.List的具体类是具体类 org.json.simple.JSONArray 和默认 java.util.Map 是org.json.simple.JSONObject。
下面是一个简单的例子来编码JSONObject使用Java的JSON对象的一个子类的java.util.HashMap 无序。如果您需要严格的顺序元素使用方法JSONValue.toJSONString(映射)有序映射实现作为 java.util.LinkedHashMap等。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
import org.json.simple.JSONObject;
class JsonEncodeDemo
{
public static void main(String[] args)
{
JSONObject obj = new JSONObject();
obj.put( "name" , "foo" );
obj.put( "num" , new Integer( 100 ));
obj.put( "balance" , new Double( 1000.21 ));
obj.put( "is_vip" , new Boolean( true ));
System.out.print(obj);
}
}
|
虽然上述程序的编译和执行,这将产生以下结果:
1
|
{ "balance" : 1000.21 , "num" : 100 , "is_vip" : true , "name" : "foo" }
|
以下是另一个例子,它显示了使用Java的JSONObject 的 JSON对象流:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
import org.json.simple.JSONObject;
class JsonEncodeDemo
{
public static void main(String[] args)
{
JSONObject obj = new JSONObject();
obj.put( "name" , "foo" );
obj.put( "num" , new Integer( 100 ));
obj.put( "balance" , new Double( 1000.21 ));
obj.put( "is_vip" , new Boolean( true ));
StringWriter out = new StringWriter();
obj.writeJSONString(out);
String jsonText = out.toString();
System.out.print(jsonText);
}
}
|
虽然上述程序的编译和执行,这将产生以下结果:
1
|
{ "balance" : 1000.21 , "num" : 100 , "is_vip" : true , "name" : "foo" }
|
在Java的JSON解码
下面的例子利用的JSONObject 和JSONArray JSONObject 是一个java.util.Map JSONArray是一个java.util.List,所以可以对其进行访问 Map 和List 的标准操作。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
import org.json.simple.JSONObject;
import org.json.simple.JSONArray;
import org.json.simple.parser.ParseException;
import org.json.simple.parser.JSONParser;
class JsonDecodeDemo
{
public static void main(String[] args)
{
JSONParser parser= new JSONParser();
String s = "[0,{\"1\":{\"2\":{\"3\":{\"4\":[5,{\"6\":7}]}}}}]" ;
try {
Object obj = parser.parse(s);
JSONArray array = (JSONArray)obj;
System.out.println( "The 2nd element of array" );
System.out.println(array.get( 1 ));
System.out.println();
JSONObject obj2 = (JSONObject)array.get( 1 );
System.out.println( "Field \"1\"" );
System.out.println(obj2.get( "1" ));
s = "{}" ;
obj = parser.parse(s);
System.out.println(obj);
s= "[5,]" ;
obj = parser.parse(s);
System.out.println(obj);
s= "[5,,2]" ;
obj = parser.parse(s);
System.out.println(obj);
} catch (ParseException pe){
System.out.println( "position: " + pe.getPosition());
System.out.println(pe);
}
}
}
|
虽然上述程序的编译和执行,这将产生以下结果:
1
2
3
4
5
6
7
8
|
The 2nd element of array
{ "1" :{ "2" :{ "3" :{ "4" :[ 5 ,{ "6" : 7 }]}}}}
Field "1"
{ "2" :{ "3" :{ "4" :[ 5 ,{ "6" : 7 }]}}}
{}
[ 5 ]
[ 5 , 2 ]
|