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}}}}
Улучшения будут полезны. Поскольку мне нужно выполнить некоторые преобразования с именами ключей, поэтому я следую этому подходу.