Jackson:了解源 JSON 是数组还是对象

Ask*_*mov 1 java json jackson deserialization

在 Jackson 库中解析 JSON 需要:

检查 messageBody 中是否有数组或对象以便路由到正确的解析的最佳方法是什么?是否只是直接检查 MessageBody 中的数组令牌?

rya*_*anp 9

一个选择是将所有可能是数组的东西都视为数组。如果您的源 JSON 刚刚从 XML 自动转换或使用 XML 优先的库(如 Jettison)创建,这通常是最方便的。

这是一个非常常见的用例,为此有一个 Jackson 开关:

ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
Run Code Online (Sandbox Code Playgroud)

然后,您可以将属性反序列化为集合类型,无论它是源 JSON 中的数组还是对象。


Mag*_*ama 7

如果你想知道你的输入是数组还是对象,你可以简单地使用该readTree方法。一个简单的例子:

ObjectMapper mapper = new ObjectMapper();

String json1 = "{\"key\": \"value\"}";
String json2 = "[\"key1\", \"key2\"]";

JsonNode tree1 = mapper.readTree(json1);
System.out.println(tree1.isArray());
System.out.println(tree1.isObject());

JsonNode tree2 = mapper.readTree(json2);
System.out.println(tree2.isArray());
System.out.println(tree2.isObject());
Run Code Online (Sandbox Code Playgroud)

如果您希望能够反序列化为多种类型,请查看多态反序列化