gpt4 book ai didi

java - 将 JSON 字符串转换为普通键值对以进行日志记录

转载 作者:行者123 更新时间:2023-11-29 05:43:12 28 4
gpt4 key购买 nike

我有一个 JSON 字符串,其中包含类似下面的结构,基本上我有一个 VO 链,每个 VO 都有 VO 列表和 VO 映射。

示例:

"MessageHeader": {
"type": "new",
"id": 10,
"add_record": "true",
},
"MessageBody": {
"dob_required": false,
"dept_name": "Purchase",
"group": {
"main_group": "main group",
"sub_group": "sub group"
},
"family_info": {
"person1": {
"name": "HisName",
"gender": "male",
"age": "31",
"office_info_present": {
"office_name": "present office",
"office_address": "some address"
"some_other_vo":{

},
},
"office_info_previous": {
"office_name": "old office",
"office_address": "some address"
},
},
"person2": {
"name": "HerName",
"gender": "Female",
"age": "25",
}
},
"active":true
}

我想在键值对中打印每个属性名称及其值。我不想打印 VO 名称,而只是打印结束属性(叶级属性)

如下字符串:

type=new id=10 add_record=true dob_required=false dept_name=purchase main_group="main group"sub_group="sub group"name=HisName gender=male age=31 .... name=HerName gender=Female 年龄=25

如何做到这一点?如果可以使用 jackson 来完成,我更愿意。否则也可以。

最佳答案

最简单的方法可能是使用 jackson 树模型遍历它。像这样的东西:

JsonNode root = mapper.readValueAsTree(jsonInput);
Map<String,String> flat = new HashMap<String,String>();
traverse(root, flat);

public void traverse(JsonNode node, Map<String,String> result)
{
Iterator<Map.Entry<String,JsonNode>> it = node.fields();
while (it.hasNext()) {
Map.Entry<String,JsonNode> entry = it.next();
JsonNode n = entry.getValue();
if (n.isObject()) { // if JSON object, traverse recursively
traverse(n);
} else { // if not, just add as String
result.put(entry.getKey(), n.asText());
}
}
}

然后您将获得可以打印的 map 。

关于java - 将 JSON 字符串转换为普通键值对以进行日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16810234/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com