【问题标题】:How to convert a nested jsonObject to a hashMap with updated field names in java with Jackson?java - 如何使用Jackson将嵌套的jsonObject转换为具有更新的字段名称的hashMap?
【发布时间】:2020-02-27 03:16:08
【问题描述】:

UPDATE:更新了代码库,现在我得到了键值对,但是在添加键|值对时递归逻辑存在一些问题。需要帮助修复此代码。 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}}}}

改进会有所帮助。 因为我需要对键名进行一些转换,所以我采用这种方法。

【问题讨论】:

    标签: java json hashmap


    【解决方案1】:

    您可以尝试使用 ObjectMapper,如下所示:

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

    其中 rawValues 是一个 json 字符串。

    【讨论】:

    • 因为我需要更改键名,所以我不能这样做,因为这会给我一个与 json 对象等效的 hashMap。我需要创建一个具有不同键名的 hashmap,因此迭代 json 并将更新的键添加到新的 hashmap 会更好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    • 1970-01-01
    • 2020-06-11
    • 1970-01-01
    • 2019-02-03
    • 2017-08-31
    • 1970-01-01
    相关资源
    最近更新 更多