有且仅有的三种处理JSON的方法



前言

SpringBoot中基于Jackson来处理JSON,和日常的Gson、FastJson不同。个人在了解Jackson过程中,发现Jackson wiki中探讨了处理JSON,XML这种固定格式文本的思路。笔者觉得非常经典,分享出来一起探讨。如果你在开发结构化文本处理框架/程序, 想必会给你提供一个比较好的思路。本文翻译自:
http://www.cowtowncoder.com/blog/archives/2009/01/entry_131.html


一、概要分析

在对Java平台上的JSON处理包做概要分析后,看起来存在N+1中方式来切分Json。然而,每个处理库都把自己的处理方式当做最正统的方式,并不考虑是否存在其他方案,甚至是给自己提供另一种选择。XML背景的工程师对此感到非常奇怪,他们已经习惯了对API集合进行标准化,且不说XML比JSON功能更强大也更复杂。那么,关于各种方法来分割和美化一个死气沉沉格式的言论都在胡说八道些什么呢?

二、一个秘密

我来告诉你这个秘密:肯定不止一种方法处理Json。当然,也不是有一堆的可选方案。实际上,不多不少只有3种方法。

迭代

基于Event(or Token)流。

数据绑定

将Json数据绑定到对象上

树遍历

从Json构造一颗树,然后用合适的方法遍历。

三、方法解释

为了更好说明每种方法的含义,咱们考虑每种方法使用的Java 标准 API。

SAX和Stax

SAX和Stax是遍历事件最本质的API:其中SAX 解析器向你发送事件,Stax则允许你在自己的应用空间下遍历事件。无论是推还是拉,其本质都是事件流。所以从事件表达角度看,回调(SAX),事件对象(Stax Event API)或者逻辑游标状态(Stax Cursor API),仅仅是同一方式的不同变种。当然,你也可以基于此构建更加精细和方便的外观API。

JAXB

JAXB是数据绑定的标准,同时还有N+1种选择(Jibx, XMLBeans, Castor等等)。他们做了同样的一件事,转换Java对象到XML和方向转换。有的用起来方便又高效,有的则不然。

DOM

DOM是定义树结构和相关机制最标准的API。但是就数据绑定而言,也有很多方案选择(XOM ,JDOM,DOM4j)。你要么node-by-node遍历,要么使用XPath.

不过这些都是面型XML的。这些和Json有什么关系呢?实际上,这个领域跟格式没啥关系。对于处理Json,三种方式都是可行的,有效的。甚至对其他结构化数据格式也一样。除此之外,我甚至想不到第四种。当然,如果你有第四种方案可以提供给我。

四、说说Jackson

Jackson支持上述三种处理方式:

Core package

jackson-core 包含JsonParser and JsonGenerator,用于完成token级别的遍历;

ObjectMapper

ObjectMapper实现了数据绑定功能: 输入Objects输出Json,或者输入Json输出Objects。

TreeMapper

TreeMapper可以通过Json构造树(使用JsonNode表示),或者将JsonNode及其孩子节点输出为String。

到这里,我已证明只有3中方法。也是Jackson中支持的方法,因此Jackson非常地完善。


总结

Jackson作者确实做足了调查,通过深入分析提炼出了仅有的3种方法。他的这种思路匹配得上他略显口气。以上就是本篇的内容,希望能加深你对Json处理方法的理解,也为你做结构化数据处理提供思路参考。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值