【问题标题】:How to Get a specific string from HashMap如何从 HashMap 中获取特定字符串
【发布时间】:2019-07-07 20:12:17
【问题描述】:

我正在尝试从 HashMap 中获取特定值。

我将JsonObject 转换为hashMap 就像这样:

Map<String, Object> mapObj = new Gson().fromJson(
        jsonObject, new TypeToken<HashMap<String, Object>>() {}.getType());

现在一切都很好。

当我尝试从 mapObj 中获取价值时 像这样

String strValue = (String) mapObj.get("estimate_time");

它给空

我的 Json 是

https://api.myjson.com/bins/16sub7

我真的不知道该怎么办。

【问题讨论】:

  • 所以这告诉你地图中没有键 "estimate_time"。或者,它就在那里,它实际上映射到null
  • 但我确定它在那里,服务器正在将其返回,正如您在 json 中看到的那样,它是来自服务器的响应,我试图获取 .. 它只提供“数据”:所有信息但我无法具体了解它
  • 在我显示的 json 文件中它的估计时间不为空":"3 mins"
  • 我觉得这真的是一个关于Gson在做什么的问题。
  • 老实说我不确定,但我会尝试解释我想要什么我在 Json 中有这 3 个对象其中 1 个里面有我需要的字符串JsonObject,但我无法获得我试图转换为地图的值,但我仍然无法获得某些东西。settext =“我需要的值”

标签: java android gson


【解决方案1】:

“estimate_time”不是有效的密钥。它包含在键“data”的值中。

如果您beautified json 值,您将能够更清楚地注意到键“estimate_time”的值包含在键“数据”的值中。

要获取“estimated_time”的值,您需要访问键“data”的 json 值,然后从中访问键“estimated_time”的值。

我以前从未真正与Gson 合作过,但以下几行应该可以工作(或者至少,让您了解如何解决这个问题)

Map<String, Object> mapObj = new Gson().fromJson(
    jsonObject, new TypeToken<HashMap<String, Object>>() {}.getType());

LinkedTreeMap<String, Object> requiredMapObj = (LinkedTreeMap<String, Object>) mapObj.get("data");

String strValue = (String) requiredMapObj.get("estimate_time");

String numberValueAlone = strValue.replaceAll("[^0-9]", "");

(Reference)

【讨论】:

  • 是的,老实说,我真的不知道该怎么做,有什么帮助吗?
  • @Dotdat 我以前从未真正使用过Gson,所以我无法给你一个具体的例子。但这个想法相当简单,您获取键“数据”的 Json 值,使用它构造一个映射,然后从中访问键“estimate_time”的值。
  • 是的,我整天都在尝试这个,但它一直给我这个 java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to java.lang.String
  • 哦,我猜Gson 内部标识了值的类型。我会更新我的答案,检查新代码是否有效。
  • 如果你知道我得到的值是 3 分钟,我还有 1 个问题,我可以只得到数字吗?哪个是 3?并且没有 {3}
猜你喜欢
  • 2017-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-31
相关资源
最近更新 更多