JavaでJSON文字列をMapに変換する方法

こんにちは、さるまりんです。

以前、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でやりとりしたいこともあるかなと思いました。(良し悪しは別として。)

読んでくださってありがとうございました。

ではまた!