我有一个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 age = 25
如何做到这一点?如果可以使用杰克逊完成,我更愿意。否则也没关系。
答案 0 :(得分:2)
最简单的方法可能是使用杰克逊的树模型,遍历它。类似的东西:
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());
}
}
}
您将获得可以打印的地图。
答案 1 :(得分:1)
您可以使用this link为您的回复创建POGO课程。它会自动为您的回复生成类。
使用google GSON库来解析您的回复。
答案 2 :(得分:0)
是的jackson可以用来解析。但它不直接。 很少有类似于JAXB for XML的实现。但我从未测试过它们 这是粗略的代码片段。
JSONParser parser = new JSONParser();
try {
JSONObject jsonObject = (JSONObject) parser.parse(new FileReader("c:\\sample.json"));
String name = (String) jsonObject.get("name");
long age = (Long) jsonObject.get("age");
JSONArray msg = (JSONArray) jsonObject.get("messages");
System.out.println("Name:"+name);
System.out.println("Age:"+age);
System.out.println("Messages:");
Iterator<String> iterator = msg.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}