栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Jackson-如何处理(反序列化)嵌套JSON?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Jackson-如何处理(反序列化)嵌套JSON?

您的数据存在问题,因为您的数组中有内部 包装
对象。想必你的

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);

这样做可能会减少代码量,但看起来却不比使用两个包装程序笨拙。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/485395.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号