是否有JSON的流媒体API?

kal*_*kal 66 streaming json

DOM是解析JSON的唯一方法吗?

Sta*_*Man 59

一些JSON解析器确实提供增量("流")解析器; 对于Java,至少从json.org页面解析器提供这样的接口:

(除了另一个答案提到的Software Monkey的解析器)

实际上,很多JSON解析器都不提供这种简单的低级接口,这有点奇怪 - 毕竟,它们已经需要实现低级解析,所以为什么不公开它.

编辑(2011年6月):Gson也有自己的流API(使用gson 1.6)


Law*_*Dol 22

通过DOM,我假设您的意思是解析器在您使用它之前立即读取整个文档.请注意,现在说DOM倾向于暗示XML,但IMO并不是真正的准确推断.

所以,在回答你的问题时 - "是",有流API和"否",DOM不是唯一的方法.也就是说,将JSON文档作为流处理通常会产生问题,因为许多对象不是简单的字段/值对,而是包含其他对象作为值,您需要解析它们来处理,这往往会导致递归.但对于简单的消息,您可以使用基于流/事件的解析器执行有用的操作.

我为JSON编写了一个pull-event解析器(它是一个类,大约700行).但我见过的大多数其他人都是面向文档的.我在解析器之上构建的一个层是一个文档阅读器,它占用了大约30个LOC.我在实践中只使用过我的解析器作为文档加载器(出于上述原因).

我相信如果你在网上搜索,你会发现基于拉动和推送的JSON解析器.

编辑:我已将解析器发布到我的网站下载.包括一个可工作的可编辑类和一个完整的例子.

编辑2:您还想看看JSON网站.


小智 14

正如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绑定

其中一些可能不允许流媒体,但其中许多肯定会.


jim*_*son 8

免责声明:我建议我自己的项目.

我在Javascript中维护一个流式JSON解析器,它结合了SAX和DOM的一些功能:

Oboe.js网站

这个想法是允许流式解析,但不要求程序员听取许多不同的事件,如原始SAX.我喜欢SAX,但它往往是大多数人需要的低水平.您可以通过注册JSONPath模式从JSON流中侦听任何有趣的节点.

代码在Github上:

Oboe.js Github页面


dsc*_*ape 7

如果你想使用纯javascript和一个在node.js和浏览器中运行的库你可以尝试单簧管:

https://github.com/dscape/clarinet

解析器是基于事件的,因为它的流式传输使得处理大型文件成为可能.API非常接近sax,代码是从sax-js派生的.


Rya*_*rty -7

回答你的第二个问题,不,许多语言都有 JSON 解析器。PHP、Java、C、Ruby 等。只需 Google 即可找到您选择的语言以及“JSON 解析器”。

  • 这并没有回答问题:问题作者问的根本不是关于通用 JSON 解析器,而是关于流解析器。 (2认同)