【问题标题】:Gson to HashMapGson 到 HashMap
【发布时间】:2013-02-03 08:42:25
【问题描述】:

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

例如,给定 JSON:

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

生成的 HashMap:

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

谢谢

【问题讨论】:

  • @MattBall 似乎对新用户非常不友好。看答案,一点也不明显,也不容易。谁曾经使用TypeToken 做任何事情?
  • 我不太清楚你所说的“非常不友好的欢迎”是什么意思。我是否发布并忘记了刚刚删除的粗俗评论?回答您的问题:我不使用 GSON,所以我不使用 TypeToken,但我确实经常使用 the equivalent in Jackson。
  • @MattBall 你有评论询问已经尝试过什么(带有链接)并说问题很简单。

标签: java android gson


【解决方案1】:

使用TypeToken,按照the GSON FAQ:

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

没有强制转换。没有不必要的对象创建。

【讨论】:

  • Type 的导入是什么?它提供了几十种选择。
  • @ThePixelPony 为返回类型的 FQCN 读取 the TypeToken#getType() JavaDoc。
  • java.lang.reflect.Type stringStringMap = new com.google.gson.reflect.TypeToken&lt;Map&lt;String, String&gt;&gt;(){}.getType();
  • 这行得通,但你的值类型不被尊重——一切都被视为字符串。如果你把它改成Map&lt;String, Object&gt;,那么你实际上会得到正确输入的值。
  • @XaeroDegreaz 这个问题巧妙地暗示这些值也应该是字符串,但可以肯定。
【解决方案2】:

如果我将 TypeToken 解决方案与 MapEnum, Object> 一起使用,我会得到“重复键: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}

【讨论】:

    【解决方案3】:

    我喜欢:

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

    【讨论】:

      猜你喜欢
      • 2014-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-15
      • 1970-01-01
      • 2016-05-10
      • 2013-01-18
      相关资源
      最近更新 更多