目录
什么是json?
概念:JavaScript Object Notation JavaScript 对象标记表示法。
在Java语言中我们把一个人的name,age封装成一个对象(person)。把对象当做参数。
JavaScript中也是,例如这个对象 var p = {"name":"tomas","age":10}; 【JavaScript会解析它】
作用:json现在多用于存储和交换文本信息的语法,进行数据的传输,json 比XML更小,更快,更易解析;
json的使用。
语法:
语法:
#数据在名称/值对中:json数据是由键值对构成的
*键用引号(单双都行)引起来,也可以不使用引号;
*值得取值类型:
1,数字 整数和浮点数
2,字符串 在双引号中
3,逻辑值 true or false
4,数组 在 方括号中“[]”
5,对象 在花括号中{}
#数据由逗号分开
#多个数据由,分割
#花括号保存对象
#方括号保存数组
var person = {'name':'tomas',"age":23};
var persons = [{'name':'tomas',"age":23},
{'name':'jack',"age":21},
{'name':'alice',"age":18}]
获取数据:
1,json对象.key key表示键值。
2,json对象['key']
3,数组对象['索引']
var name = person['name'];
var name1 = person.name;
var tempPerson= persons[1];
如何得到json中的数据呢?
运用for in循环。
// 获取persons数组中的所有json数据 for in 循环,获得键的值
for(let key in person){
console.log( key);
// the type of key is a string
console.log(typeof key);
console.log(person[key]);
}
for(var i=0;i<persons.length;i++){
var p =persons[i];
// console.log(p);
for(let key in p){
console.log(key);
console.log(p[key]);
}
}
json数据和Java对象的转换。
我们用Jackson【springMVC内置的json转换器】
1,导入依赖
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.8</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.8</version>
</dependency>
2,创建Jackson的核心对象-ObjectMapper
ObjectMapper om = new ObjectMapper();
3,Java对象转json,json转Java对象。
public class JacksonTest {
// java对象转为json
public static void main(String[] args) throws Exception {
Person per = new Person();
per.setId(1);
per.setName("tomas");
// jackson 核心对象
ObjectMapper om = new ObjectMapper();
/**
* writeValue(参数1,obj);几种重载
* 参数1
* File 将对象转为json字符串,并保存到指定的文件中
* Writer 将对象转为json字符串,并将json数据填充到字符输入流中
* OutputStream 将对象转为json字符串,并将数据填充到字节输出流中
*
* writeValueAsString(obj),将对象转为json
*
*/
String s = om.writeValueAsString(per);
System.out.println(s);
// 把Jason数据变为Java对象
Person p1 = om.readValue(s,Person.class);
System.out.println(p1);
}
}
结果:
Jackson的两个重要注解
1, @JsonIgnore 排除属性。对象属性不转换json
2,@JsonFormat 属性值的格式化 例如日期 有毫秒,我们并不需要。
所以@JsonFormat(pattern = "yyyy-MM-dd")
细节:
Java中List集合会转为json数组。
Map集合就是json形式【本身 key = value 键值对形式】;