原文:http://www.cnblogs.com/Eason-S/p/5668064.html
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。
一.JSON 语法规则
- 数据在键值对中
- 数据由逗号分隔
- 花括号保存对象
- 方括号保存数组
二.基础结构
JSON有对象和数组两种结构,通过这两种结构可以表示各种复杂的结构。
1、对象:对象在js中表示为“{}”括起来的内容,数据结构为 {key:value,key:value,...}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是 数字、字符串、数组、对象几种。
2、数组:数组在js中是中括号“[]”括起来的内容,数据结构为 ["java","javascript","vb",...],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种。
经过对象、数组2种结构就可以组合成复杂的数据结构了。
三.基础示例
1.名称/值对
名称/值对组合中的名称写在前面(在双引号中),值对写在后面(同样在双引号中),中间用冒号隔开:
1
2
|
{ "firstName" : "Brett" } { "firstName" : "Brett" , "lastName" : "McLaughlin" , "email" : "aaaa" } |
2.表示数组
如果使用 JSON,就只需将多个带花括号的记录分组在一起:
1 {
2 "people":[
3 {"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"},
4 {"firstName":"Jason","lastName":"Hunter","email":"bbbb"},
5 {"firstName":"Elliotte","lastName":"Harold","email":"cccc"}
6 ]
7 }
也可以使用相同的语法表示多个值(每个值包含多个记录):
1 {
2 "programmers": [{
3 "firstName": "Brett",
4 "lastName": "McLaughlin",
5 "email": "aaaa"
6 }, {
7 "firstName": "Jason",
8 "lastName": "Hunter",
9 "email": "bbbb"
10 }, {
11 "firstName": "Elliotte",
12 "lastName": "Harold",
13 "email": "cccc"
14 }],
15 "authors": [{
16 "firstName": "Isaac",
17 "lastName": "Asimov",
18 "genre": "sciencefiction"
19 }, {
20 "firstName": "Tad",
21 "lastName": "Williams",
22 "genre": "fantasy"
23 }, {
24 "firstName": "Frank",
25 "lastName": "Peretti",
26 "genre": "christianfiction"
27 }],
28 "musicians": [{
29 "firstName": "Eric",
30 "lastName": "Clapton",
31 "instrument": "guitar"
32 }, {
33 "firstName": "Sergei",
34 "lastName": "Rachmaninoff",
35 "instrument": "piano"
36 }]
37 }
四.JavaJSON与对象之间的转换
1. 将对象转换为JSON字符串,返回值为一个JSON字符串
1 public static String toJson(Object value) {
2 try {
3 return mapper.writeValueAsString(value);
4 } catch (Exception e) {
5 e.printStackTrace();
6 }
7
8 return null;
9 }
2. 将JSON字符串转换为实体对象,返回值为实体对象
1 public static <T> T toObject(String json, Class<T> valueType) {
2 Assert.hasText(json);
3 Assert.notNull(valueType);
4 try {
5 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
6 mapper.setDateFormat(dateFormat);
7 return mapper.readValue(json, valueType);
8 } catch (Exception e) {
9 e.printStackTrace();
10 }
11 return null;
12 }