您的数据存在问题,因为您的数组中有内部 包装
对象。想必你的
Vendor对象被设计成手柄
id,
name,
company_id,但每次的多个对象也都包裹在一个对象与单一属性
vendor。
我假设您正在使用Jackson
数据绑定
模型。
如果是这样,那么有两件事要考虑:
第一种是使用特殊的Jackson配置属性。杰克逊-从1.9开始,我相信,如果您使用的是旧版杰克逊,则可能无法使用-
提供
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<VendorWrapper> vendors = new ArrayList<VendorWrapper>(); // gettors, settors for vendors if you need them}// in your deserialization pre:ObjectMapper mapper = new ObjectMapper();JsonNode rootNode = mapper.readValue(jsonInput, VendorsWrapper.class);VendorsWrapper的对象树类似于您的JSON:
VendorsWrapper: vendors: [ VendorWrapper vendor: Vendor, VendorWrapper: vendor: Vendor, ... ]
最后,您可以使用杰克逊 树模型
来解析到这一点
JsonNodes,丢弃外侧的节点,并为每个
JsonNode中
ArrayNode,要求:
mapper.readValue(node.get("vendor").getTextValue(), Vendor.class);这样做可能会减少代码量,但看起来却不比使用两个包装程序笨拙。



