こんにちは、さるまりんです。
以前、PHPで配列とJSONの変換を行いました。
今回はJavaでやってみます。
文字列からMap
オブジェクトに変換するには「文字列がJSONかをチェックする方法」で使ったJacksonライブラリのObjectMapper
を使います。
以下、メソッドを書いてみました。
/**
* JSON文字列をMapに
* @param json json文字列
* @return json文字列を読み込んだMapオブジェクト。失敗した場合はnull
*/
public Map<String, Object> jsonStringToMap(String json) {
Map<String, Object> map = null;
// com.fasterxml.jackson.databind.ObjectMapperを使います
ObjectMapper mapper = new ObjectMapper();
try {
// キーがString、値がObjectのマップに読み込みます。
map = mapper.readValue(json, new TypeReference<Map<String, Object>>(){});
} catch (Exception e) {
// エラー!
e.printStackTrace();
}
return map;
}
このメソッドでこんなJSON文字列
{
"name": "salumarine",
"occupation": "programmer",
"address": {
"place": "mountain side",
"country": "Japan"
},
"points": 125
}
を読み込んで、Mapを出力するとこんな表示になります。
{name=salumarine, occupation=programmer, address={place=mountain side, country=Japan}, points=125}
ちなみにMap
をJSON文字列にするにはこんな処理になります。
こちらもメソッドにしています。
/**
* MapをJSON文字列に
* @param map 変換元のMap
* @return JSON文字列。失敗した場合はnull
*/
public String mapToJsonString(Map<String, Object> map) {
// ここもObjectMapperです
ObjectMapper mapper = new ObjectMapper();
String json = null;
try {
// mapをjson文字列に変換します。
json = mapper.writeValueAsString(map);
} catch (Exception e) {
// エラー!
e.printStackTrace();
}
return json;
}
先のメソッドで変換されたmap
を読み込ませて返却された文字列です。
{"name":"salumarine","occupation":"programmer","address":{"place":"mountain side","country":"Japan"},"points":125}
改行が無いですが元に戻りましたね。
わざわざクラスを作るまでも無いようなケースでは簡単にMap
でやりとりしたいこともあるかなと思いました。(良し悪しは別として。)
読んでくださってありがとうございました。
ではまた!
コメント
[…] https://salumarine.com/how-to-convert-json-string-to-map-in-java/ […]