浅谈JSON
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.名称/值对
名称/值对组合中的名称写在前面(在双引号中),值对写在后面(同样在双引号中),中间用冒号隔开:
{"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 }