我有一个文本文件作为输入,其中包含Employee
个。现在我需要重构代码,JSON可以包含Employee[]
数组或Building[]
数组。我正在使用Jackson,我的Java课程中有枚举。
{
Employee[]
}
{
Building[]
}
我有代码来有选择地解析每个文档,但代码如何检测它是Employee
doc还是Building
doc?
我知道这是一种糟糕的设计,但我正在做一些限制。
我需要这样的东西:
boolean isBuildingDoc(String json);
boolean isEmployeeDoc(String json);
我该怎么做?
答案 0 :(得分:0)
我的建议是为你的json添加一个名为' info'的顶层属性。
例如:
{
"info": {
"document_type": "employee"
},
"content": {
// rest of your json goes here...
}
}
将您曾经生成的旧json放入'内容'。然后,当您解析json文件时,可以轻松检查info.document_type标志以查看您正在使用的文档类型。
但是,如果您无法控制正在解析的json(例如,如果它是从另一个程序发送的),则此方法将无效。
答案 1 :(得分:0)
您可以使用jackson的树模型来检测Employee
或Building
节点。
例如。
ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readTree(jsonString);
if(node.get("Employee") != null){
//handle it according to employee
}
else if(node.get("Building ") != null){
//handle it according to building
}
注意:请记住一件事,get
方法也会搜索子元素中的字段,因此,如果您的Employee
数组包含Building
字段作为子元素,则此方法不会工作