json 解析器概念:是将 json 转换为其他语言的工具
常见的 json 解析器有:Jsonlib,Gson,fastjson,jackson
这里我们学习 jackson,这是 springmvc 框架自带的 json 解析器。
导入Jar包或坐标
1.下载 jar 包,点击这里 ,并导入项目中(3个)
maven导入如下坐标
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.7.3</version>
</dependency>
2.创建对应的实体类,准备转换
Java对象转换为Json对象
注意 : 请确保你的Java对象是bean对象, 非标准对象可能无法转换!
1.实例化对象(这里假设为 person)
Person p = new Person();
p.setName("张三");
p.setAge(23);
p.setGender("男");
2.创建 Jackson 的核心对象 ObjectMapper
ObjectMapper mapper = new ObjectMapper();
3.开始转换
第一种转换写出到文件:writeValue(参数1多种重载, Object)
①File:写出到指定文件②Writer:字符输出流③OutputStream:字节输出流
此方法, 可以直接如果使用 response.getWriter() 作为第一个参数可直接写回客户端
mapper.writeValue(new File("d:a.txt"),p);
第二种转换直接获取:writeValueAsString(Object object)
String json = mapper.writeValueAsString(p);
//{"name":"张三","age":23,"gender":"男"}
对时间日期类型的值,需要在class的属性中加上注解,以便忽略或格式化
- @JsonIgnore // 忽略该属性
- @JsonFormat(pattern = “yyyy-MM-dd”) //pattern是自定义格式
(对 list 对象转换后是一个数组,对 map 对象转换后是普通的 json 对象)
Json对象转换为Java对象
1.初始化 json 字符串
这里的转义字符是 idea 自动添加的
String json = "{\"gender\":\"男\",\"name\":\"张三\",\"age\":23}";
2.创建ObjectMapper对象
ObjectMapper mapper = new ObjectMapper();
3.开始转换,并打印结果
这里使用 mapper.readValue 方法
Person person = mapper.readValue(json, Person.class);
System.out.println(person);
//Person{name='张三', age=23, gender='男'}