Android - Как получить имя ключа из JSON в дополнение к значению - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть проект 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», и мне нужно определить, какая фабрика производит этот продукт.Поэтому мне нужно получить return '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
        }
    }

, но это возвращает весь объект, отформатированный в виде строки.

Спасибо залюбые предложения.

1 Ответ

0 голосов
/ 17 сентября 2018

Попробуйте просто вернуть key.

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