您的数据存在问题,因为您的数组中有内部包装对象。大概您的Vendor
对象旨在处理id
, name
, company_id
,但是这些多个对象中的每一个也都包装在具有单个属性的对象中vendor
。
我假设您使用的是 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<VendorWrapper> vendors = new ArrayList<VendorWrapper>();
// 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,
...
]
最后,您可以使用杰克逊树模型将其解析为JsonNodes
,丢弃外部节点,并为JsonNode
中的每个ArrayNode
调用:
mapper.readValue(node.get("vendor").getTextValue(), Vendor.class);
这可能会导致更少的代码,但它似乎并不比使用两个包装器更笨拙。