【基础知识】_JSON

JSON

基本概念

JavaScript Object Notation:JavaScript对象表示法

json对象是JavaScript中的数据对象,其实就类似于java中一个没有方法只有属性的类。

1
2
3
4
5
6
7
8
Person p = new Person();
p.setName("张三");
p.setAge(23);
p.setGender("男");

var p = {"name":"张三","age":23,"gender":"男"};
//也可以写成{'name':"张三",'age':23,'gender':"男"}
//或者{name:"张三",age:23,gender:"男"}

json数据是由键值对构成的,其中key用单、双引号或者不用引号引起来都可以,key只是表示属性名,也就相当于变量名,并不具有特定的数据类型;value的取值类型有:

  • 数字(整数或浮点数)
  • 字符串(在双引号中)
  • 逻辑值(true或false)
  • 数组(在方括号中){“person”:[{},{}]}
  • json对象(在花括号中){“address”:{“province”:”陕西”}}
  • null

语法规则

一定要搞清楚json对象和json数据的关系:json对象是一个变量,指向json键值对数据。json对象不是json键值对中的键。

  • json对象中的不同键值对用逗号分隔
  • 用花括号来保存json对象,一个花括号表示一个json对象
  • 用方括号来表示数组,可以有json对象数组,json数据中的value类型也可以是数组

获取数据:

  • json对象.键名
  • json对象[“键名”]
  • json对象数组[索引].键名

遍历json对象中的键值对:

1
2
3
4
5
6
7
8
var person = {"name": "张三", age: 23, 'gender': true};

//该for in 循环的写法是独属于json对象键值对数据的循环遍历语法。
for(var key in person){
alert(key+":"+person[key]);
//此处不能写成alert(key + ":" + person.key),因为这样就相当于person."name",正确的写法应该是person.name。

}

遍历json对象数组中的键值对:

1
2
3
4
5
6
7
8
9
10
var ps = [{"name": "张三", "age": 23, "gender": true},
{"name": "李四", "age": 24, "gender": true},
{"name": "王五", "age": 25, "gender": false}];

for (var i = 0; i < ps.length; i++) {
var p = ps[i];
for(var key in p){
alert(key+":"+p[key]);
}
}

JSON数据和Java对象的相互转换

常用json解析器:jackson(Spring内置的json解析器)

JSON数据转为Java对象的步骤:

  1. 导入jackson相关jar包

  2. 在java语句中创建Jackson核心对象ObjectMapper

  3. 调用ObjectMapper的相关方法进行转换:readValue(json字符串数据,Class);

    Java对象转为JSON对象的步骤:

  4. 导入jackson相关jar包

  5. 在java语句中创建Jackson核心对象ObjectMapper

  6. 调用ObjectMapper的相关方法进行转换:

    • writeValue(参数1,obj);当参数1为:
      • File:将obj对象转换为JSON字符串,并保存到指定的文件中
      • Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中
      • OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中
    • writeValueAsString(obj);将对象转为json字符串
  7. 在java中的obj对象的javabean封装类的属性前添加注解

    • @JsonIgnore:排除属性,该注解后的属性在java对象被转化成json时不加入json键值对中。
    • @JsonFormat:属性值得格式化,该注解后的属性在java对象被转化成json时该属性对应的值字符串按小括号中的格式输出(一般用于Date类型属性,@JsonFormat(pattern = “yyyy-MM-dd”) )。
  8. java对象也可以是List、Map对象,只要保持对象中元素格式没问题就行。