Как сохранить и получить доступ к значению во вложенном json по ключу в java

Я хочу хранить и получать доступ к вложенному значению json по ключу, например arrayOfObjectList.objectKey1objectKey.objectKey1 и другим. Теперь я храню данные в HashMap (Строка, Объект) и не знаю, как получить к ним доступ по ключу потому что json имеет неопределенный слой, а внутренние данные могут быть arrayList, object и string. Пожалуйста, представьте меня для выполнения этой задачи.

Я новичок, извините за мой алгоритм

code

   Gson gson = new Gson();
   HashMap<String,Object> param = new HashMap<>();
   param = (HashMap<String, Object>) gson.fromJson(jsonData, param.getClass());
    for (Map.Entry resourceItem : param.entrySet()) {
        checkAndParseInternalLayer(param,resourceItem.getKey().toString());
    }

method

    void checkAndParseInternalLayer(HashMap<String, Object> data, String key) {
    Object obj = data.get(key);

    if (obj instanceof ArrayList) {
        List<Object> internalList = new ArrayList<>();
        for (Object dataObj : (ArrayList)obj) {
            if (dataObj instanceof LinkedTreeMap) {
                // get all key in LinkedTreeMap
                Set<String> keySet = ((LinkedTreeMap) dataObj).keySet();
                HashMap<String, Object> internalMap = new HashMap<>();

                // set HashMap
                for (String keyStr : keySet) {
                    AFLog.d("set map : "+keyStr+" = "+((LinkedTreeMap) dataObj).get(key));
                    internalMap.put(keyStr, ((LinkedTreeMap) dataObj).get(keyStr));
                }

                // check internal layer
                for (HashMap.Entry entry : internalMap.entrySet()) {
                    checkAndParseInternalLayer(internalMap, entry.getKey().toString());
                }
                internalList.add(internalMap);
            }
            else if (dataObj instanceof String) {
                internalList.add(dataObj);
            }
        }
        data.put(key, internalList);
    } else if (obj instanceof LinkedTreeMap) {
        // get all key in LinkedTreeMap
        Set<String> keySet = ((LinkedTreeMap) obj).keySet();
        HashMap<String, Object> internalMap = new HashMap<>();

        // set HashMap
        for (String keyStr : keySet) {
            internalMap.put(keyStr, ((LinkedTreeMap) obj).get(keyStr));
        }

        // check internal layer
        for (HashMap.Entry entry : internalMap.entrySet()) {
            checkAndParseInternalLayer(internalMap, entry.getKey().toString());
        }
        data.put(key, internalMap);
    }
}

json data

    {
      "stringKey": "stringValue",
      "valueStringList": [
         "value1",
         "value2"
      ],
      "arrayOfObjectList": [
       {
         "objectKey1": "objectValue1",
         "objectKey2": "objectValue2"
       },
       {
         "objectKey1": "objectValue1",
         "objectKey2": "objectValue2"
       }
      ],
      "objectKey": {
        "objectKey1": "objectValue1",
        "objectKey2": "objectValue2"
      }
    }

Поделитесь кодом, который вы пробовали.

aaronR 14.03.2018 15:35

Загляните в JsonPath, если я правильно понял ваши потребности

kaqqao 14.03.2018 15:37

Думаю, это может помочь: stackoverflow.com/a/29084522/9224219

Datz 14.03.2018 15:41
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
174
0

Другие вопросы по теме