Gson到HashMap

Dan*_*uer 50 java android gson

有没有办法将包含json的String转换为HashMap,其中每个键都是json-key,值是json-key的值?json没有嵌套值.我正在使用Gson lib.

例如,给定JSON:

{
"id":3,
"location":"NewYork"
}
Run Code Online (Sandbox Code Playgroud)

生成HashMap:

<"id", "3">
<"location", "NewYork">
Run Code Online (Sandbox Code Playgroud)

谢谢

Mat*_*all 113

使用TypeToken,按照该GSON常见问题:

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

没有铸造.没有不必要的对象创建

  • `java.lang.reflect.Type stringStringMap = new com.google.gson.reflect.TypeToken&lt;Map&lt;String, String&gt;&gt;(){}.getType();` (7认同)
  • Type的重要性是什么?它提供了许多选择. (4认同)
  • @ThePixelPony阅读[TypeToken#getType()`JavaDoc](http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/com/google/gson/reflect/TypeToken.html)返回类型的FQCN. (2认同)
  • 这有效,但您的值类型不受尊重 - 所有内容都被视为字符串.如果将其更改为"Map <String,Object>",那么您实际上将获得正确键入的值. (2认同)

ale*_*b83 8

如果我将TypeToken解决方案与Map < 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());
Run Code Online (Sandbox Code Playgroud)

结果:

{id=3.0, location=NewYork}
Run Code Online (Sandbox Code Playgroud)