Jackson - ObjectMapper


ジャックソンを使ってJSONを変換する最も簡単な方法はジャックソンの ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper).JacksonのObjectMapperはString、Stream、またはファイルから使用できます.解析したJSONを表すオブジェクト図を作成します.
Jackson Databind
このObjectMapperはJackSon DataBindプロジェクトにあるので、プロジェクトのパスの下でインストールする必要があります.インストールのチュートリアルについては、この文章を参照してください.
JackSon ObjectMapperの例
次はJackson ObjectMapperの簡単な例です.
ObjectMapper objectMapper = new ObjectMapper();

String carJson = "{ \"brand\" : \"Mercedes\", \"doors\" : 5 }";

try {
    Car car = objectMapper.readValue(carJson, Car.class);
    System.out.println("car.brand = " + car.brand);
    System.out.println("car.doors = " + car.doors);
} catch (IOException e) {
    e.printStackTrace();
}

Carクラスは私が作成したもので、ご覧のようにcar.classはreadValue()メソッドの2番目のパラメータで、メソッドの1番目のパラメータはJSONのソース(String、Streamまたはファイル)です.
Jackson Annotations
JackSonには一連の注釈が含まれています.JackSonのJSONとjavaオブジェクトの相互変換を修正することができます.Jacksonの注釈は私の文章にあります. Jackson annotation tutorialで説明した.
Jackson JSONTree Model
JackSonには、JSONオブジェクトを表す埋め込まれたモデルがあります.JSONがどのように受信するか分からない場合や、オブジェクト代表を作成できない場合はtree modelを使用すると便利です.このJacksonツリーモデルはJsonNodeクラスで表され、JacksonのObjectMapperを使用してJSONをJsonNodeツリーモデルに変換することができます.自分のクラスで作ったように.
Jacksonツリーモデルの例
下は簡単なJackSonツリーモデルの例です.
String carJson = "{ \"brand\" : \"Mercedes\", \"doors\" : 5 }";
ObjectMapper objectMapper = new ObjectMapper();
try {
    JsonNode node = objectMapper.readValue(carJson, JsonNode.class);
} catch (IOException e) {
    e.printStackTrace();
}

ご覧のように、このJSON文字列はCarオブジェクトではなくJsonNodeオブジェクトに渡されます.ただ、以前使用していたCar.classではなく、JsonNode.classを2番目のパラメータとしてreadValue()メソッドに渡すだけです.
JackSon JsonNodeクラス
JSONをJsonNode(またはJsonNodeのインスタンス)に変換すると、JsonNodeツリーモデルに変換できます.次はJsonNodeの例で、JSONのフィールド、配列、埋め込みオブジェクトへのアクセス方法を示しています.
String carJson =
        "{ \"brand\" : \"Mercedes\", \"doors\" : 5," +
        "  \"owners\" : [\"John\", \"Jack\", \"Jill\"]," +
        "  \"nestedObject\" : { \"field\" : \"value\" } }";

ObjectMapper objectMapper = new ObjectMapper();

try {

    JsonNode node = objectMapper.readValue(carJson, JsonNode.class);

    JsonNode brandNode = node.get("brand");
    String brand = brandNode.asText();
    System.out.println("brand = " + brand);

    JsonNode doorsNode = node.get("doors");
    int doors = doorsNode.asInt();
    System.out.println("doors = " + doors);

    JsonNode array = node.get("owners");
    JsonNode jsonNode = array.get(0);
    String john = jsonNode.asText();
    System.out.println("john  = " + john);

    JsonNode child = node.get("nestedObject");
    JsonNode childField = child.get("field");
    String field = childField.asText();
    System.out.println("field = " + field);

} catch (IOException e) {
    e.printStackTrace();
}
JSON文字列にはownersという配列フィールドが含まれており、埋め込まれたオブジェクトはnestedObjectと呼ばれています.
文字列からJSONを読み込む
文字列からJSONを読み取るのは非常に簡単ですが、実際には見たことがありますが、JSON文字列は方法の最初のパラメータとして渡され、下はもう一つの簡単な例です.
ObjectMapper objectMapper = new ObjectMapper();

String carJson =
    "{ \"brand\" : \"Mercedes\", \"doors\" : 5 }";

Car car = objectMapper.readValue(carJson, Car.class);

ReaderからJSONを読み込む
1つのReaderインスタンスからJSONを読み込むことができます.下は簡単なインスタンスです.
ObjectMapper objectMapper = new ObjectMapper();

String carJson =
        "{ \"brand\" : \"Mercedes\", \"doors\" : 4 }";
Reader reader = new StringReader(carJson);

Car car = objectMapper.readValue(reader, Car.class);

FileからJSONを読み込む
ファイルからJSONを読み込むには、同じくStringReader(StringReaderではなく、前の章を参照)を通過するか、Fileを通過するか、下の方が簡単な例です.
ObjectMapper objectMapper = new ObjectMapper();

File file = new File("data/car.json");

Car car = objectMapper.readValue(file, Car.class);

URLからJSONを読み込む
URLからJSONを読み込む
ObjectMapper objectMapper = new ObjectMapper();

URL url = new URL("file:data/car.json");

Car car = objectMapper.readValue(url, Car.class);

これはファイルパスを使用する例で、HTTP ULRを使用することもできます.
InputStreamからJSONを読み込む
Jacksonを使用したObjectMapperも同様にinputStreamからJSONを読み取ることができますが、下は一例です
ObjectMapper objectMapper = new ObjectMapper();

InputStream input = new FileInputStream("data/car.json");

Car car = objectMapper.readValue(input, Car.class);

一つのByte配列からJSONを読み込む
Jacksonはbyte配列からJSONを読み取ることをサポートしており、下は一例である
ObjectMapper objectMapper = new ObjectMapper();

String carJson =
        "{ \"brand\" : \"Mercedes\", \"doors\" : 5 }";

byte[] bytes = carJson.getBytes("UTF-8");

Car car = objectMapper.readValue(bytes, Car.class);

オブジェクトからJSONを生成
Jackson ObjectMapperもオブジェクトからJSONを生成するために使用できます.下の方法を使用することができます.
writeValue() writeValueAsString() writeValueAsBytes()
次はCarオブジェクトからJSONが生成された例です
ObjectMapper objectMapper = new ObjectMapper();

Car car = new Car();
car.brand = "BMW";
car.doors = 4;

objectMapper.writeValue(
    new FileOutputStream("data/output-2.json"), car);

この例では、まずObjectMapperを作成し、次にCarインスタンスを呼び出し、最後にObjectMapperのwriteValueメソッドを呼び出します.このメソッドは、CarオブジェクトをJSONに変換し、所与のFileOutputStreamに書き込むことができます.このObjectMapperの別の2つの方法は、オブジェクトからJSONを生成し、文字列またはbyte配列で返すことができます.下は例です.
ObjectMapper objectMapper = new ObjectMapper();

Car car = new Car();
car.brand = "BMW";
car.doors = 4;

String json = objectMapper.writeValueAsString(car);
System.out.println(json);

このJSON出力の結果
{"brand":"BMW","doors":4}
原文住所:http://tutorials.jenkov.com/java-json/jackson-objectmapper.html