「Java」JacksonでJavaオブジェクトのJSON表現を得るコード

Jackson を利用して Javaオブジェクトの JSON 表現を出力するサンプルコードを書いたのでメモとして残しておきます。

package com.example.jackson;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;

public class ObjectToJson {

    private static ObjectMapper mapper = new ObjectMapper();

    static {
        mapper.enable(SerializationFeature.INDENT_OUTPUT);
    }

    public static String convertToJson(Object o) {
        String json = null;
        try {
            json = mapper.writeValueAsString(o);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return json;
    }
}

ObjectMapper の writeValueAsString に対象のオブジェクトを渡すのみです。 インデントをつけるために SerializationFeature.INDENT_OUTPUT を指定しています。

ObjectMapper (jackson-databind 2.7.0 API)

実行結果も併せてはっておきます。

package com.example.jackson;

import java.util.List;
import java.util.Map;

public class PlainObject {

    private String string;
    private int i;
    private List<String> list;
    private Map<String, String> map;
    private ChildObject co;

    public String getString() {
        return string;
    }

    public void setString(String string) {
        this.string = string;
    }

    public int getI() {
        return i;
    }

    public void setI(int i) {
        this.i = i;
    }

    public List<String> getList() {
        return list;
    }

    public void setList(List<String> list) {
        this.list = list;
    }

    public Map<String, String> getMap() {
        return map;
    }

    public void setMap(Map<String, String> map) {
        this.map = map;
    }

    public ChildObject getCo() {
        return co;
    }

    public void setCo(ChildObject co) {
        this.co = co;
    }
}

class ChildObject {
    private String s;
    private int i;

    public String getS() {
        return s;
    }

    public void setS(String s) {
        this.s = s;
    }

    public int getI() {
        return i;
    }

    public void setI(int i) {
        this.i = i;
    }
}
package com.example.jackson;

import java.util.Arrays;
import java.util.HashMap;

public class Main {
    public static void main(String[] args) {
        PlainObject pojo = new PlainObject();
        pojo.setString("test");
        pojo.setI(0);
        pojo.setList(Arrays.asList(new String[] { "list1", "list2", "list3" }));
        pojo.setMap(new HashMap<String, String>() {
            {
                put("key1", "value1");
                put("key2", "value2");
                put("key3", "value3");
            }
        });
        ChildObject co = new ChildObject();
        co.setS("aaa");
        co.setI(1);
        pojo.setCo(co);

        System.out.println("=== print1 =====");
        System.out.println(ObjectToJson.convertToJson(pojo));

        pojo = new PlainObject();
        pojo.setString("test");
        pojo.setI(0);
        pojo.setList(Arrays.asList(new String[] { "list1", "list2", "list3" }));
        pojo.setCo(co);

        System.out.println("=== print2(contain null value) =====");
        System.out.println(ObjectToJson.convertToJson(pojo));
    }
}
  • 実行結果
=== print1 =====
{
  "string" : "test",
  "i" : 0,
  "list" : [ "list1", "list2", "list3" ],
  "map" : {
    "key1" : "value1",
    "key2" : "value2",
    "key3" : "value3"
  },
  "co" : {
    "s" : "aaa",
    "i" : 1
  }
}
=== print2(contain null value) =====
{
  "string" : "test",
  "i" : 0,
  "list" : [ "list1", "list2", "list3" ],
  "map" : null,
  "co" : {
    "s" : "aaa",
    "i" : 1
  }
}

いい感じに出力されています。 簡単ですが、以上です。

[環境情報] Windows 10 Java SE 8 Update 152 Jackson 2.7.4