天天看点

jackson json 嵌套对象_java – Jackson – 如何处理(反序列化)嵌套JSON?

您的数据有问题,因为您在数组中有内部包装器对象。假定您的Vendor对象被设计为处理id,name,company_id,但是这些多个对象中的每一个也被包装在具有单个属性供应商的对象中。

我假设你使用的是Jackson Data Binding模型。

如果是这样,那么有两件事要考虑:

第一个是使用一个特殊的Jackson配置属性。 Jackson – 从1.9我相信,如果你使用的老版本的Jackson – 提供UNWRAP_ROOT_VALUE,这可能不可用。它的设计为您的结果包装在顶级单一属性对象,你想要丢弃的情况。

所以,玩弄:

objectMapper.configure(SerializationConfig.Feature.UNWRAP_ROOT_VALUE, true);

第二个是使用包装器对象。即使在丢弃外部包装器对象之后,仍然存在将Vendor对象包装在单一属性对象中的问题。使用包装器来解决这个问题:

class VendorWrapper

{

Vendor vendor;

// gettors, settors for vendor if you need them

}

类似地,您也可以定义一个包装类来处理外部对象,而不是使用UNWRAP_ROOT_VALUES。假设你有正确的Vendor,VendorWrapper对象,你可以定义:

class VendorsWrapper

{

List vendors = new ArrayList();

// gettors, settors for vendors if you need them

}

// in your deserialization code:

ObjectMapper mapper = new ObjectMapper();

JsonNode rootNode = mapper.readValue(jsonInput, VendorsWrapper.class);

VendorsWrapper的对象树类似于您的JSON:

VendorsWrapper:

vendors:

[

VendorWrapper

vendor: Vendor,

VendorWrapper:

vendor: Vendor,

...

]

最后,可以使用Jackson Tree Model将其解析为JsonNodes,丢弃外部节点,对于ArrayNode中的每个JsonNode,调用:

mapper.readValue(node.get("vendor").getTextValue(), Vendor.class);

这可能导致更少的代码,但似乎没有使用两个包装器笨拙。