在JSON文档中检测对象类型

时间:2016-02-26 01:59:14

标签: java json jackson

我有一个文本文件作为输入,其中包含Employee个。现在我需要重构代码,JSON可以包含Employee[]数组或Building[]数组。我正在使用Jackson,我的Java课程中有枚举。

{
    Employee[]
}

{
    Building[]
}

我有代码来有选择地解析每个文档,但代码如何检测它是Employee doc还是Building doc?

我知道这是一种糟糕的设计,但我正在做一些限制。

我需要这样的东西:

boolean isBuildingDoc(String json);

boolean isEmployeeDoc(String json);

我该怎么做?

2 个答案:

答案 0 :(得分:0)

我的建议是为你的json添加一个名为' info'的顶层属性。

例如:

{
  "info": {
    "document_type": "employee"
  },
  "content": {
    // rest of your json goes here...
  }
}

将您曾经生成的旧json放入'内容'。然后,当您解析json文件时,可以轻松检查info.document_type标志以查看您正在使用的文档类型。

但是,如果您无法控制正在解析的json(例如,如果它是从另一个程序发送的),则此方法将无效。

答案 1 :(得分:0)

您可以使用jackson的树模型来检测EmployeeBuilding节点。 例如。

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字段作为子元素,则此方法不会工作