1

我有一个 JSON 数组,我想确保它只包含字符串。Jackson 隐式地将整数和日期转换为字符串。我想确保 JSON 数组中的每个元素实际上都是一个字符串。

    Object[] badModuleArray = new Object[]{"case", 1, 2, "employee", new Date()};

    ObjectMapper objectMapper = new ObjectMapper();
    String jsonModules = objectMapper.writeValueAsString(badModuleArray);

    try
    {
        TypeFactory typeFactory = TypeFactory.defaultInstance();
        mapper.readValue(modules, typeFactory.constructCollectionType(List.class, String.class));
    }
    catch(IOException e)
    {
        logger.error("something other than strings in JSON object");

    }

在上面的示例中,我希望 ObjectMapper 不将整数、日期等转换为字符串。如果 JSON 数组中的每个元素都不是字符串,我希望抛出异常。这可能吗?

4

1 回答 1

2

Jackson 将每个对象转换为字符串,因为您已经告诉它您想要一个List<String>.

相反,如果其中任何一个不是字符串,请向 Jackson 询问List<Object>并检查 List 的内容以抛出错误:

List list = objectMapper.readValue(jsonModules, typeFactory.constructCollectionType(List.class, Object.class));
for (Object item : list) {
    System.out.println(item + " is a: " + item.getClass());
    if (!(item instanceof String)) {
        System.out.println("Not a string!");
    }
}

对于["case",1,2,"employee",1358444552861]我得到的 JSON:

case is a: class java.lang.String
1 is a: class java.lang.Integer
不是字符串!
2 是:class java.lang.Integer
不是字符串!
员工是:class java.lang.String
1358444552861 是:class java.lang.Long
不是字符串!

于 2013-01-17T17:43:52.633 回答