2013-02-18 11 views
49

jsonを含むStringをHashMapに変換する方法はありますか?すべてのキーはjson-keyで、値はjson-keyの値ですか? jsonにはネストされた値はありません。私はGsonのlibを使用しています。例えばGson to HashMap

、所与JSON:

{ 
"id":3, 
"location":"NewYork" 
} 

得られたハッシュマップ:

<"id", "3"> 
<"location", "NewYork"> 

おかげ

+0

@MattBallは、新しいユーザーにはかなり非友好的な歓迎です。答えを見ると、それほど明白ではなく、ほとんどシンプルではありません。 'TypeToken'を何に使っているのですか? –

+0

私はあなたが「非常に不愉快な歓迎」を意味するかどうかは分かりません。投稿しましたが、削除されたばかばかしいコメントについては忘れましたか?あなたの質問に答えるには:私はGSONを使用しないので、私は 'TypeToken'を使用しませんが、私は** [Jacksonで同等のものを使用します](http://fasterxml.github.io/jackson-core /javadoc/2.2.0/com/fasterxml/jackson/core/type/TypeReference.html)頻繁にかわいいです。 –

+0

@MattBall何が試されているのか(リンク付きで)質問し、その質問はかなりシンプルだったと言っています。 –

答えて

111

使用TypeTokenthe GSON FAQの通り:

Gson gson = new Gson(); 
Type stringStringMap = new TypeToken<Map<String, String>>(){}.getType(); 
Map<String,String> map = gson.fromJson(json, stringStringMap); 

キャスティングなし。不要なオブジェクトの作成はありません。

+1

ありがとう、その作業! –

+3

Typeのインポートは何ですか?それは何十ものオプションを与える。 – ThePixelPony

+2

@ThePixelPony [TypeToken#getType() 'JavaDoc](http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/com/google/gson/reflect/TypeToken.html)を読んでください。戻り値の型のFQCN。 –

7

マップを使用してTypeTokenソリューションを使用している場合、 Enum、Object> "duplicate key:null"が表示されます。

私にとって最善の解決策は次のとおりです。

String json = "{\"id\":3,\"location\":\"NewYork\"}"; 
Gson gson = new Gson(); 
Map<String, Object> map = new HashMap<String, Object>(); 
map = (Map<String, Object>)gson.fromJson(json, map.getClass()); 

結果:

{id=3.0, location=NewYork} 
2

私が好き:

private static class MyMap extends HashMap<String,String> {}; 
... 
MyMap map = gson.fromJson(json, MyMap.class);