【问题标题】:Android - How to get key name from JSON in addition to the valueAndroid - 除了值之外,如何从 JSON 中获取键名
【发布时间】:2018-09-17 20:08:53
【问题描述】:

我有一个 Android 项目,我在其中使用存储的 JSON 中的一些数据。我在几个地方使用它来获取值,但是现在,我还需要获取键的名称而不是值。有可能吗?我正在使用“org.json”库来解析 JSON。

我的 JSON:

{
  "cookbook": {
    "products": {
      "factory1": {
        "product": "product1",
        "rate": 2,
      },
      "factory2": {
        "product": "product2",
        "rate": 14,
        "requires": {
          "money": 20,
          "product3": 3,
          "product4": 2
        }
      }
    }
  }

正如我所说,我在检索值方面没有问题,但现在我在变量中有一个产品名称,比如说“product2”,我需要确定哪个工厂生产该产品。所以我需要返回'factory2'。

我试过了:

    mainCookbookJson = new JSONObject(loadJSONFromAsset(activity, "cookbook.json"));
    JSONObject cookbookJson = mainCookbookJson.getJSONObject("cookbook");
    JSONObject productsJson = cookbookJson.getJSONObject("products");

    for(Iterator<String> iter = productsJson.keys(); iter.hasNext();) {
        String key = iter.next();
        if (productsJson.getJSONObject(key).getString("product").equals(product)) {
            return productsJson.getString(key);
          //return productsJson.getJSONObject(key).toString(); // Also tried
        }
    }

但这会返回格式化为字符串的整个对象。

感谢您的任何建议。

【问题讨论】:

  • 您可能想要返回key,因为它的值有factory1factory2
  • @Apoorv 是的,完全正确。这就是我所需要的,也是问题中所说的,但我不知道如何实现它。
  • 哦,我明白了,你的意思是一个变量名'key'。

标签: android json key key-value


【解决方案1】:

尝试只返回key

for(Iterator<String> iter = productsJson.keys(); iter.hasNext();) {
    String key = iter.next();
    if (productsJson.getJSONObject(key).getString("product").equals(product)) {
        return key;
    }
}

【讨论】:

  • 多么简单的解决方案。非常感谢,它有效。
猜你喜欢
  • 2014-01-29
  • 1970-01-01
  • 1970-01-01
  • 2021-10-25
  • 1970-01-01
  • 2019-12-08
  • 1970-01-01
  • 2016-06-22
  • 2016-09-16
相关资源
最近更新 更多