Как преобразовать вложенный jsonObject в hashMap с обновленными именами полей в java с Джексоном? - PullRequest
0 голосов
/ 27 февраля 2020

UPDATE: обновлена ​​база кода, и теперь я получаю пары значений ключа, но есть некоторая проблема с логикой рекурсии c при добавлении пары ключ | значение. Нужна помощь с исправлением этого кода. OLD ISSUE: я пытался преобразовать JSON в HashMap, но, поскольку JSON является вложенным объектом, я не могу сохранить имя ключа для вложенных полей во время рекурсивных вызовов. Ниже обновленный пример кода:

private HashMap<String,Object> addToMap(JsonNode jsonNode, HashMap<String, Object> map) {
        // TODO Auto-generated method stub
        if (jsonNode.isObject()) {
            ObjectNode objectNode = (ObjectNode) jsonNode;
            Iterator<Map.Entry<String, JsonNode>> iter = objectNode.fields();


            while (iter.hasNext()) {

                Map.Entry<String, JsonNode> entry = iter.next();
                parentKey=entry.getKey();
                //set key from the mapperLookup.

                map.put(parentKey,  addToMap(entry.getValue(),new HashMap<String,Object>()));

            }
        } else if (jsonNode.isArray()) {
            ArrayNode arrayNode = (ArrayNode) jsonNode;
            for (int i = 0; i < arrayNode.size(); i++) {
                //set key from the mapperLookup.
                map.put(parentKey,  addToMap(arrayNode.get(i),new HashMap<String,Object>()));

            }

        } else if (jsonNode.isValueNode()) {


            ValueNode valueNode = (ValueNode) jsonNode;
            //set key from the mapperLookup.
            map.put(parentKey, valueNode.asText());
        }
        return map;

    }

Пример ввода:

{
"S_name":"xyz",
"K_id":"12233",

"N_dum":[{"K_id":"dfff"},{"S_nam":"dfgg"}]


}

ожидается выход:

{S_name=xyz,
 K_id=12233,
 N_dum={K_id=dfff,S_nam=dfgg}
}

Токовый выход:

{S_name={S_name=xyz}, K_id={K_id=12233}, N_dum={N_dum={K_id={K_id=dfff}}, K_id={S_nam={S_nam=dfgg}}}}

Улучшения будут полезны. Поскольку мне нужно выполнить некоторые преобразования с именами ключей, поэтому я следую этому подходу.

1 Ответ

1 голос
/ 27 февраля 2020

Вы можете попробовать использовать ObjectMapper следующим образом:

ObjectMapper mapper = new ObjectMapper();
Map<String, Object> dataRaw = null;
dataRaw = mapper.readValue(rawValues, new TypeReference<Map<String, Object>>() {});

, который rawValues ​​является строкой json.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...