使用 gson 从 JsonArray 中获取值

Posted

技术标签:

【中文标题】使用 gson 从 JsonArray 中获取值【英文标题】:Getting a Value from a JsonArray using gson 【发布时间】:2017-05-12 07:36:01 【问题描述】:

我到处搜索,但找不到如何做到这一点,我超级卡住了。我没有使用 JSON 文件的经验,因此非常感谢您用勺子喂食并提供解释。

我这里有这个 JSON 文本用于测试:

    
      "id":"4566e69fc90748ee8d71d7ba5aa00d20",
      "properties":
                    [
                     
                      "name":"textures",
                      "value":"eyJ0aW1lc3RhbXAiOjE0ODI4ODAxNDMwNzYsInByb2ZpbGVJZCI6IjQ1NjZlNjlmYzkwNzQ4ZWU4ZDcxZDdiYTVhYTAwZDIwIiwicHJvZmlsZU5hbWUiOiJUaGlua29mZGVhdGgiLCJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTNlODFiOWUxOWFiMWVmMTdhOTBjMGFhNGUxMDg1ZmMxM2NkNDdjZWQ1YTdhMWE0OTI4MDNiMzU2MWU0YTE1YiJ9LCJDQVBFIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMjJiOWM1ZWE3NjNjODZmYzVjYWVhMzNkODJiMGZhNjVhN2MyMjhmZDMyMWJhNTQ3NjZlYTk1YTNkMGI5NzkzIn19fQ==",
                     ,
                    ],
      "name":"Thinkofdeath",
    

我目前有这个:

    JsonElement playerProfile = new JsonParser().parse(jsonLine);
    JsonObject jsonProfile = playerProfile.getAsJsonObject();
    JsonArray properties = jsonProfile.getAsJsonArray("properties");

返回 [

[
  
    "name":"textures",
    "value":"eyJ0aW1lc3RhbXAiOjE0ODI4ODAxNDMwNzYsInByb2ZpbGVJZCI6IjQ1NjZlNjlmYzkwNzQ4ZWU4ZDcxZDdiYTVhYTAwZDIwIiwicHJvZmlsZU5hbWUiOiJUaGlua29mZGVhdGgiLCJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTNlODFiOWUxOWFiMWVmMTdhOTBjMGFhNGUxMDg1ZmMxM2NkNDdjZWQ1YTdhMWE0OTI4MDNiMzU2MWU0YTE1YiJ9LCJDQVBFIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMjJiOWM1ZWE3NjNjODZmYzVjYWVhMzNkODJiMGZhNjVhN2MyMjhmZDMyMWJhNTQ3NjZlYTk1YTNkMGI5NzkzIn19fQ==",
  ,
]

当然。如何从此 JsonArray 中获取“价值”?注意我使用的是 Google 的 API,Gson

【问题讨论】:

对我来说,通常我将 json 建模为 pojo —— 但你总是可以get it as a JsonElement 然后get as json object,最后get("value") 得到value 作为(可悲的)JsonElement。 . 这是相当迂回的,但可以肯定的是,我建议你做 pojo.. 感谢您的帮助,但就像我说的,我对这个 JSON 东西完全陌生,有点需要用勺子喂食:P 【参考方案1】:

您可以通过以下方式获取values

JsonObject propertiesJson = properties.get(0);
String value = propertiesJson.getString("value");

【讨论】:

啊哈!它有效,只是它不是“getString”它的“get(“value”).toString” @SageM 如果您使用 Json 库,请尝试使用它的方法以获得更好的便利。获取值:propertiesJson.get("value").getAsString(); properties.get(0) 是 JsonElement,而不是 Gson 中的 JsonObject。我使用了这段代码。字符串名称 = properties.get(0).getAsJsonObject().get("name").getAsString();【参考方案2】:

数组是来自 com.google.gson 库的 JsonArray 对象

for (int i=0; i<array.size(); i++) 
    JsonObject json = array.get(i).getAsJsonObject();
    String value = json.get("key").getAsString();

【讨论】:

以上是关于使用 gson 从 JsonArray 中获取值的主要内容,如果未能解决你的问题,请参考以下文章

Gson 中 JsonArray添加JsonObject覆盖前面了

jsonarray 哪个性能好

如何使用 Gson 将 JSONArray 转换为 List?

GSON - 从字符串中获取 JSON 值

Gson解析JsonObject和JsonArray

如何获取jsonarray中 某个值