Jackson 入门
1. 快速参考
1.1 将java对象转化为json串(序列化), writeValue(...)
ObjectMapper mapper = new ObjectMapper();
Staff obj = new Staff();
//Object to JSON in file
mapper.writeValue(new File("c:\\file.json"), obj);
//Object to JSON in String
String jsonInString = mapper.writeValueAsString(obj);
1.2 将json串转化为java对象(反序列化) ,readValue(...)
ObjectMapper mapper = new ObjectMapper();
String jsonInString = "{'name' : 'mjw'}";
//JSON from file to Object
Staff obj = mapper.readValue(new File("c:\\file.json"), Staff.class);
//JSON from URL to Object
Staff obj = mapper.readValue(new URL("http://www.jianshu.com/u/c38e94dcec65"), Staff.class);
//JSON from String to Object
Staff obj = mapper.readValue(jsonInString, Staff.class);
2. Jackson 操作步骤
2.1 创建ObjectMapper对象。
创建ObjectMapper对象。它是一个可重复使用的对象。
ObjectMapper mapper = new ObjectMapper();
2.2 反序列化JSON到对象。
从JSON对象使用readValue()方法来获取。通过JSON字符串和对象类型作为参数JSON字符串/来源。
//Object to JSON Conversion
Student student = mapper.readValue(jsonString, Student.class);
2.3 序列化对象到JSON。
使用writeValueAsString()方法来获取对象的JSON字符串表示。
//Object to JSON Conversion
jsonString = mapper.writeValueAsString(student);
3. 实例
3.1 首先导入 maven 依赖:
<!--Jackson 核心库-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.9</version>
</dependency>
<!--Jackson 序列化库-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.9</version>
</dependency>
<!--Jackson 注解支持-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.8.9</version>
</dependency>
3.2 编写测试类:Test.java
public class Test {
public static void main(String[] args) {
ObjectMapper mapper = new ObjectMapper();
String jsonString = "{\"name\": \"Mahesh\", \"age\": 21}";
try {
// 反序列化,將 json 转换为 java对象
Student student = mapper.readValue(jsonString, Student.class);
System.out.println(student);
// 序列化,将 java 对象转换为 json
jsonString = mapper.writeValueAsString(student);
System.out.println(jsonString);
} catch (JsonParseException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
class Student {
private String name;
private int age;
// 构造方法
public Student() {
}
/** getter 和 setter 方法 **/
/** toString 方法 **/
}
4. 应该了解的知识点
4.1 序列化和反序列化概念
序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。
4.2 注解
- @JsonIgnore:排除属性。
- @JsonFormat:属性值得格式化
举个例子:
设置日期属性,当我们将其转换为 json 对象时,会出现无法转换成我们想要的格式,这时候我们可以使用 @JsonIgnore 忽略该属性,或是使用 @JsonFormat 格式化属性
// 直接在对象类 Student 中对应的属性中设置
class Student {
...
//@JsonIgnore
@JsonFormat(pattern = "yyyy-MM-dd")
private Date birthday;
...
}
// 测试类中设置日期属性,进行转换
class Test {
//...
Student student = new Student();
// 设置日期属性
student.set(new Date());
//...
}
4.3 复杂java对象转换
转换步骤方法一样,转换的json格式稍有不同
- List:数组
如:
[{"name": "张三", "age": 23},{}]
- Map:和对象格式一致
如:
{"name": "张三", "age": 23}
4.4 服务器响应的数据,在客户端使用时,要想当做json数据格式使用。有两种解决方案:
- $.get(type):将最后一个参数type指定为"json"。前端操作,指定接收的类型为 json 类型,如果要识别中文,则服务端需要添加:
response.setContentType("text/html; charset=utf-8");
- 在服务器端设置MIME类型(设置响应的数据格式为 json ,并且发送的字符编码是 utf-8 ):
response.setContentType("application/json;charset=utf-8");
采用第二种方法明显更好。
完。
网友评论