Jackson - ObjectMapper
ジャックソンを使ってJSONを変換する最も簡単な方法はジャックソンの ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper).JacksonのObjectMapperはString、Stream、またはファイルから使用できます.解析したJSONを表すオブジェクト図を作成します.
Jackson Databind
このObjectMapperはJackSon DataBindプロジェクトにあるので、プロジェクトのパスの下でインストールする必要があります.インストールのチュートリアルについては、この文章を参照してください.
JackSon ObjectMapperの例
次はJackson ObjectMapperの簡単な例です.
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ツリーモデルの例です.
ご覧のように、このJSON文字列はCarオブジェクトではなくJsonNodeオブジェクトに渡されます.ただ、以前使用していたCar.classではなく、JsonNode.classを2番目のパラメータとしてreadValue()メソッドに渡すだけです.
JackSon JsonNodeクラス
JSONをJsonNode(またはJsonNodeのインスタンス)に変換すると、JsonNodeツリーモデルに変換できます.次はJsonNodeの例で、JSONのフィールド、配列、埋め込みオブジェクトへのアクセス方法を示しています.
文字列からJSONを読み込む
文字列からJSONを読み取るのは非常に簡単ですが、実際には見たことがありますが、JSON文字列は方法の最初のパラメータとして渡され、下はもう一つの簡単な例です.
ReaderからJSONを読み込む
1つのReaderインスタンスからJSONを読み込むことができます.下は簡単なインスタンスです.
FileからJSONを読み込む
ファイルからJSONを読み込むには、同じくStringReader(StringReaderではなく、前の章を参照)を通過するか、Fileを通過するか、下の方が簡単な例です.
URLからJSONを読み込む
URLからJSONを読み込む
これはファイルパスを使用する例で、HTTP ULRを使用することもできます.
InputStreamからJSONを読み込む
Jacksonを使用したObjectMapperも同様にinputStreamからJSONを読み取ることができますが、下は一例です
一つのByte配列からJSONを読み込む
Jacksonはbyte配列からJSONを読み取ることをサポートしており、下は一例である
オブジェクトからJSONを生成
Jackson ObjectMapperもオブジェクトからJSONを生成するために使用できます.下の方法を使用することができます.
writeValue() writeValueAsString() writeValueAsBytes()
次はCarオブジェクトからJSONが生成された例です
この例では、まずObjectMapperを作成し、次にCarインスタンスを呼び出し、最後にObjectMapperのwriteValueメソッドを呼び出します.このメソッドは、CarオブジェクトをJSONに変換し、所与のFileOutputStreamに書き込むことができます.このObjectMapperの別の2つの方法は、オブジェクトからJSONを生成し、文字列またはbyte配列で返すことができます.下は例です.
このJSON出力の結果
{"brand":"BMW","doors":4}
原文住所:http://tutorials.jenkov.com/java-json/jackson-objectmapper.html
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