Jackson 2 - JSONからJSONへのJavaオブジェクトの変換

ジャクソン2 – JavaオブジェクトとJSONの変換

このチュートリアルでは、Jackson 2.xを使用してJavaオブジェクトをJSONに/から変換する方法を示します。

1. 基本

1.1 Convert a Staff object to from JSON.

writeValue(...) –JavaオブジェクトからJSON

    ObjectMapper mapper = new ObjectMapper();

    // Java object to JSON file
    mapper.writeValue(new File("c:\\test\\staff.json"), new Staff());

    // Java object to JSON string
    String jsonString = mapper.writeValueAsString(object);

readValue(...) –JSONからJavaオブジェクト

    ObjectMapper mapper = new ObjectMapper();

    //JSON file to Java object
    Staff obj = mapper.readValue(new File("c:\\test\\staff.json"), Staff.class);

    //JSON URL to Java object
    Staff obj = mapper.readValue(new URL("http://some-domains/api/name.json"), Staff.class);

    //JSON string to Java Object
    Staff obj = mapper.readValue("{'name' : 'example'}", Staff.class);

P.S Tested with Jackson 2.9.8

Note
このHow to parse JSON with Jacksonを読んでください。これには、JSONとの間のオブジェクト、@JsonView@JsonProperty@JsonInclude@JsonIgnoreなどのJacksonの例が含まれています。 s、およびいくつかのFAQ。

1. ジャクソンをダウンロード

1.1 Declares jackson-databind, it will pull in jackson-annotations and jackson-core

pom.xml

    
        com.fasterxml.jackson.core
        jackson-databind
        2.9.8
    

1.2 Review the Jackson dependencies :

ターミナル

$ mvn dependency:tree

\- com.fasterxml.jackson.core:jackson-databind:jar:2.9.8:compile
[INFO]    +- com.fasterxml.jackson.core:jackson-annotations:jar:2.9.0:compile
[INFO]    \- com.fasterxml.jackson.core:jackson-core:jar:2.9.8:compile

Difference between Jackson 1 and Jackson 2
ほとんどのAPIは、同じメソッド名とシグネチャを維持していますが、パッケージが異なるだけです。

  • ジャクソン1.x – org.codehaus.jackson.map

  • ジャクソン2.x – com.fasterxml.jackson.databind

2. POJO

テスト用のシンプルなJavaオブジェクト。

Staff.java

public class Staff {

    private String name;
    private int age;
    private String[] position;              //  Array
    private List skills;            //  List
    private Map salary; //  Map

    // getters , setters, some boring stuff
}

3. JavaオブジェクトからJSON

JacksonExample1.java

package com.example;

import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.File;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

public class JacksonExample1 {

    public static void main(String[] args) {

        ObjectMapper mapper = new ObjectMapper();

        Staff staff = createStaff();

        try {

            // Java objects to JSON file
            mapper.writeValue(new File("c:\\test\\staff.json"), staff);

            // Java objects to JSON string - compact-print
            String jsonString = mapper.writeValueAsString(staff);

            System.out.println(jsonString);

            // Java objects to JSON string - pretty-print
            String jsonInString2 = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(staff);

            System.out.println(jsonInString2);

        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    private static Staff createStaff() {

        Staff staff = new Staff();

        staff.setName("example");
        staff.setAge(38);
        staff.setPosition(new String[]{"Founder", "CTO", "Writer"});
        Map salary = new HashMap() {{
            put("2010", new BigDecimal(10000));
            put("2012", new BigDecimal(12000));
            put("2018", new BigDecimal(14000));
        }};
        staff.setSalary(salary);
        staff.setSkills(Arrays.asList("java", "python", "node", "kotlin"));

        return staff;

    }

}

出力

c:\test\staff.json

{"name":"example","age":38,"position":["Founder","CTO","Writer"],"skills":["java","python","node","kotlin"],"salary":{"2018":14000,"2012":12000,"2010":10000}}

ターミナル

{"name":"example","age":38,"position":["Founder","CTO","Writer"],"skills":["java","python","node","kotlin"],"salary":{"2018":14000,"2012":12000,"2010":10000}}

{
  "name" : "example",
  "age" : 38,
  "position" : [ "Founder", "CTO", "Writer" ],
  "skills" : [ "java", "python", "node", "kotlin" ],
  "salary" : {
    "2018" : 14000,
    "2012" : 12000,
    "2010" : 10000
  }
}

4. JSONからJavaオブジェクト

JacksonExample2.java

package com.example;

import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.File;
import java.io.IOException;

public class JacksonExample2 {

    public static void main(String[] args) {

        ObjectMapper mapper = new ObjectMapper();

        try {

            // JSON file to Java object
            Staff staff = mapper.readValue(new File("c:\\test\\staff.json"), Staff.class);

            // JSON string to Java object
            String jsonInString = "{\"name\":\"example\",\"age\":37,\"skills\":[\"java\",\"python\"]}";
            Staff staff2 = mapper.readValue(jsonInString, Staff.class);

            // compact print
            System.out.println(staff2);

            // pretty print
            String prettyStaff1 = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(staff2);

            System.out.println(prettyStaff1);


        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}

出力

Staff{name='example', age=37, position=null, skills=[java, python], salary=null}

{
  "name" : "example",
  "age" : 37,
  "position" : null,
  "skills" : [ "java", "python" ],
  "salary" : null
}

Note
その他のジャクソンの例はこれを読んでいます–How to parse JSON with Jackson