美文网首页
Jackson 入门

Jackson 入门

作者: 希希里之海 | 来源:发表于2019-08-05 00:45 被阅读0次

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 注解
  1. @JsonIgnore:排除属性。
  2. @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格式稍有不同

  1. List:数组
    如:
[{"name": "张三", "age": 23},{}]
  1. Map:和对象格式一致
    如:
{"name": "张三", "age": 23}
4.4 服务器响应的数据,在客户端使用时,要想当做json数据格式使用。有两种解决方案:
  1. $.get(type):将最后一个参数type指定为"json"。前端操作,指定接收的类型为 json 类型,如果要识别中文,则服务端需要添加:
response.setContentType("text/html; charset=utf-8");
  1. 在服务器端设置MIME类型(设置响应的数据格式为 json ,并且发送的字符编码是 utf-8 ):
response.setContentType("application/json;charset=utf-8");

采用第二种方法明显更好。


完。

相关文章

网友评论

      本文标题:Jackson 入门

      本文链接:https://www.haomeiwen.com/subject/rngudctx.html