DOM是解析JSON的唯一方式吗?
DOM是解析JSON的唯一方式吗?
一些JSON解析器提供增量(“流式”)解析器;对于Java来说,至少以下来自json.org页面的解析器提供这样的接口:
(除了another answer提到的Software Monkey的解析器之外)
实际上,很奇怪为什么那么多JSON解析器都没有提供这个简单的低级别接口--毕竟,它们已经需要实现低级别解析,为什么不公开呢。
编辑(2011年6月):Gson也有自己的streaming API(使用gson 1.6)
就像stefanB提到的那样,http://lloyd.github.com/yajl/是用于流解析JSON的C语言库。该页面上还提到了许多其他语言的封装:
- yajl-ruby - 适用于YAJL的Ruby绑定
- yajl-objc - 适用于YAJL的Objective-C绑定
- YAJL IO绑定(适用于IO语言)
- Python绑定有两种风格,py-yajl或yajl-py
- yajl-js - node.js绑定(镜像到github)
- lua-yajl - lua绑定
- ooc-yajl - ooc绑定
- yajl-tcl - tcl绑定
其中一些可能不支持流式处理,但是许多语言封装确实支持。
免责声明:我在推荐自己的项目。
我在Javascript中维护了一个流式JSON解析器,它结合了SAX和DOM的一些特点:
这个想法是允许流式解析,但不需要像原始SAX那样要求程序员监听很多不同的事件。我喜欢SAX,但对于大多数人来说,它往往过于底层。您可以通过注册JSONPath模式来监听JSON流中的任何有趣节点。
代码在Github上:
JsonReader
和 JsonWriter
。JsonMapper
类型则建立在它们之上,因此,开发者可以将读取器和写入器类看作是 LitJSON 的低级编程接口。”对于Python来说,jsaone是一个备选方案(据称更轻量、更高效),替代了ijson(查看链接以获取大致的基准测试结果,显示jsaone大约快3倍)。
免责声明:我是jsaone的作者,而且我所做的测试非常基础……如果被证明是错误的,我将很高兴接受!
回答问题标题:YAJL是C语言中的JSON解析库:
YAJL记住了支持重新启动解析所需的所有状态。这允许在从磁盘或网络读取数据时逐步进行解析。
因此,我认为使用yajl解析JSON可以被视为处理数据流。