杰克逊有没有办法检查JSON字符串是否与POJO兼容?

时间:2016-02-25 10:37:24

标签: java json jackson

我有一个json字符串和两个具有不同属性的不同类。类看起来像这样:

学生

studentId

名称

GPA

getter / setter方法

教师

teacherId

名称

getter / setter方法

现在我得到一个json字符串,如果json字符串与对象模型兼容,我需要一个函数来返回布尔值。

所以json可能是这样的:

{studentId: 1213, name: Mike, surname: Anderson, gpa: 3.0}

我需要一个函数来返回true,如下所示:

checkObjectCompatibility(json, Student.class); 

2 个答案:

答案 0 :(得分:5)

如果json字符串与类不兼容。

mapper.readValue(jsonStr, Student.class);

方法抛出JsonMappingException

所以你可以创建一个方法并调用readValue方法并使用try-catch块来捕获JsonMappingException以返回false,否则返回true。

像这样;

public boolean checkJsonCompatibility(String jsonStr, Class<?> valueType) throws JsonParseException, IOException {

        ObjectMapper mapper = new ObjectMapper();

        try {
            mapper.readValue(jsonStr, valueType);
            return true;
        } catch (JsonMappingException e) {
            return false;
        } 

    }

答案 1 :(得分:2)

实现这一目标的最快方法是试错:

boolean isA(String json, Class expected) {
  try {
     ObjectMapper mapper = new ObjectMapper();
     mapper.readValue(json, expected);
     return true;
  } catch (JsonMappingException e) {
     e.printStackTrace();
     return false;
  } 
}

但我强烈建议以更有条理的方式处理问题,即尽量不要依赖试错。