当前位置:网站首页>有且仅有的三种处理JSON的方法
有且仅有的三种处理JSON的方法
2022-08-04 05:33:00 【FA-117】
前言
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处理方法的理解,也为你做结构化数据处理提供思路参考。
边栏推荐
猜你喜欢
随机推荐
C语言结构体(必须掌握版)
结构体内存对齐-C语言
2022在 Go (Golang) 中使用微服务的系统课程
【HIT-SC-MEMO5】哈工大2022软件构造 复习笔记5
LeetCode刷题
file editor
JUC锁框架——基于AQS的实现,从ReentrantLock认识独占和共享
gRPC intro 1:RPC
指针的运算【C语言】
Object.requireNonNull 方法说明
第九篇 ApplicationContext初始化
如何在网页标题栏中加入图片!
网络安全工程师们改不掉的“老毛病”
C#找系统文件夹路径
strlen 转义字符
【独立游戏体验计划】学习记录
淘宝分布式文件系统存储(二)
基于Event Stream操作JSON
webrtc技术名词和关键技术要点:SVC,REMB,SVC...
Uos统信系统 本地APT源配置