JavaオブジェクトをJSONに変換する/JSONから変換する方法(Jackson)

このチュートリアルでは、ジャクソン1.xのデータバインディングを使用してJavaオブジェクトをJSONに変換する方法を説明します。

1.クイックリファレンス

1.1 JavaオブジェクトをJSON、 `writeValue(…​)`に変換する

ObjectMapper mapper = new ObjectMapper();
User user = new User();
//Object to JSON in file
mapper.writeValue(new File("c:\\user.json"), user);
//Object to JSON in String
String jsonInString = mapper.writeValueAsString(user);

1.2 JSONをJavaオブジェクトの `readValue(…​)`に変換する

ObjectMapper mapper = new ObjectMapper();
String jsonInString = "{'name' : 'mkyong'}";
//JSON from file to Object
User user = mapper.readValue(new File("c:\\user.json"), User.class);
//JSON from String to Object
User user = mapper.readValue(jsonInString, User.class);

P.Sすべてのサンプルは、Jackson 1.9.13

2.ジャクソンの依存関係

Jackson 1.xの場合、6つの別々のjarファイルがあり、ほとんどの場合 `jackson-mapper-asl`が必要です。

pom.xml

    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-mapper-asl</artifactId>
        <version>1.9.13</version>
    </dependency>

3. POJO(古いJavaオブジェクト)

テスト用のUserオブジェクト。

User.java

package com.mkyong.json;

import java.util.List;

public class User {

    private String name;
    private int age;
    private List<String> messages;

   //getters and setters
}

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

`user`オブジェクトをJSON形式の文字列に変換します。

JacksonExample.java

package com.mkyong.json;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;

public class JacksonExample {
    public static void main(String[]args) {

        ObjectMapper mapper = new ObjectMapper();

       //For testing
        User user = createDummyUser();

        try {
           //Convert object to JSON string and save into file directly
            mapper.writeValue(new File("D:\\user.json"), user);

           //Convert object to JSON string
            String jsonInString = mapper.writeValueAsString(user);
            System.out.println(jsonInString);

           //Convert object to JSON string and pretty print
            jsonInString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(user);
            System.out.println(jsonInString);


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

    }

    private static User createDummyUser(){

        User user = new User();

        user.setName("mkyong");
        user.setAge(33);

        List<String> msg = new ArrayList<>();
        msg.add("hello jackson 1");
        msg.add("hello jackson 2");
        msg.add("hello jackson 3");

        user.setMessages(msg);

        return user;

    }
}

出力

…​.//new json file is created in D:\\user.json"

{"name":"mkyong","age":33,"messages":["hello jackson 1","hello jackson 2","hello jackson 3"]}

{ "name" : "mkyong", "age" : 33, "messages" :["hello jackson 1", "hello jackson 2", "hello jackson 3"]}

===  JSONからJavaオブジェクトへ

JSON文字列を読み込んでJavaオブジェクトに変換し直します。

JacksonExample.java

package com.mkyong.json;

import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List;

import org.codehaus.jackson.JsonGenerationException; import org.codehaus.jackson.map.JsonMappingException; import org.codehaus.jackson.map.ObjectMapper;

public class JacksonExample { public static void main(String[]args) {

ObjectMapper mapper = new ObjectMapper();
try {
//Convert JSON string from file to Object
 User user = mapper.readValue(new File("G:\\user.json"), User.class);
 System.out.println(user);
//Convert JSON string to Object
 String jsonInString = "{\"age\":33,\"messages\":[\"msg 1\",\"msg 2\"],\"name\":\"mkyong\"}";
 User user1 = mapper.readValue(jsonInString, User.class);
 System.out.println(user1);
} catch (JsonGenerationException e) {
    e.printStackTrace();
} catch (JsonMappingException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}
}

}

出力

User[name=mkyong, age=33, messages=[hello jackson 1, hello jackson 2, hello jackson 3]] User[name=mkyong, age=33, messages=[msg 1, msg 2]]…​.

6. @JsonView

`@ JsonView`はバージョン1.4からJacksonでサポートされています。表示するフィールドを制御することができます。

6.1シンプルなクラス。

Views.java

package com.mkyong.json;

public class Views {

    public static class NameOnly{};
    public static class AgeAndName extends NameOnly{};

}

6.2表示したいフィールドに注釈をつける。

User.java

package com.mkyong.json;

import java.util.List;
import org.codehaus.jackson.map.annotate.JsonView;

public class User {

    @JsonView(Views.NameOnly.class)
    private String name;

    @JsonView(Views.AgeAndName.class)
    private int age;

    private List<String> messages;

   //getter and setters
}

6.3 writerWithView()を介して `@ JsonView`を有効にします。

JacksonExample.java

package com.mkyong.json;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializationConfig;

public class JacksonExample {
    public static void main(String[]args) {

        ObjectMapper mapper = new ObjectMapper();
       //By default all fields without explicit view definition are included, disable this
        mapper.configure(SerializationConfig.Feature.DEFAULT__VIEW__INCLUSION, false);

       //For testing
        User user = createDummyUser();

        try {
           //display name only
            String jsonInString = mapper.writerWithView(Views.NameOnly.class).writeValueAsString(user);
            System.out.println(jsonInString);

           //display namd ana age
            jsonInString = mapper.writerWithView(Views.AgeAndName.class).writeValueAsString(user);
            System.out.println(jsonInString);


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

    }

    private static User createDummyUser(){

        User user = new User();

        user.setName("mkyong");
        user.setAge(33);

        List<String> msg = new ArrayList<>();
        msg.add("hello jackson 1");
        msg.add("hello jackson 2");
        msg.add("hello jackson 3");

        user.setMessages(msg);

        return user;

    }
}

出力

{"name":"mkyong"}
{"name":"mkyong","age":33}

参考文献

  1. Jackson Project Home @github

  2. リンク://java/how-do-convert-java-object-to-from-json-format-gson-api/[Gson

    • JavaオブジェクトをJSONに変換する/JSONから変換する]