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网站.
免责声明:我建议我自己的项目.
我在Javascript中维护一个流式JSON解析器,它结合了SAX和DOM的一些功能:
这个想法是允许流式解析,但不要求程序员听取许多不同的事件,如原始SAX.我喜欢SAX,但它往往是大多数人需要的低水平.您可以通过注册JSONPath模式从JSON流中侦听任何有趣的节点.
代码在Github上:
如果你想使用纯javascript和一个在node.js和浏览器中运行的库你可以尝试单簧管:
https://github.com/dscape/clarinet
解析器是基于事件的,因为它的流式传输使得处理大型文件成为可能.API非常接近sax,代码是从sax-js派生的.
Rya*_*rty -7
回答你的第二个问题,不,许多语言都有 JSON 解析器。PHP、Java、C、Ruby 等。只需 Google 即可找到您选择的语言以及“JSON 解析器”。
| 归档时间: |
|
| 查看次数: |
69958 次 |
| 最近记录: |