Javascript 解析;“流媒体”;JSON

Javascript 解析;“流媒体”;JSON,javascript,jquery,json,spring-mvc,jackson,Javascript,Jquery,Json,Spring Mvc,Jackson,我在浏览器中有一个网格 我希望通过JSON将数据行发送到网格,但是浏览器应该在接收JSON时不断解析它,并在解析时向网格添加行。换句话说,在接收到整个JSON对象之后,不应该一次将行添加到网格中——它们应该在接收时添加 这可能吗?特别是使用jQuery、Jackson和Spring3MVC 这个主意有名字吗?我在网上只看到这一想法的零星记录。请查看 您不能使用浏览器的JSON.parse来解析不完整或无效的JSON。如果您是流式传输文本,它将始终尝试在某个点解析无效的JSON,这将导致它失败。这

我在浏览器中有一个网格

我希望通过JSON将数据行发送到网格,但是浏览器应该在接收JSON时不断解析它,并在解析时向网格添加行。换句话说,在接收到整个JSON对象之后,不应该一次将行添加到网格中——它们应该在接收时添加

这可能吗?特别是使用jQuery、Jackson和Spring3MVC

这个主意有名字吗?我在网上只看到这一想法的零星记录。

请查看


您不能使用浏览器的
JSON.parse来解析不完整或无效的JSON。如果您是流式传输文本,它将始终尝试在某个点解析无效的JSON,这将导致它失败。这里有流式JSON解析器,您可能会找到适合您需要的东西

在您的情况下,最简单的方法仍然是为每行发送完整的JSON文档。

2017年3月更新:

WebSocket允许您保持与服务器的开放连接,您可以使用该连接将数据流传输到表中。您可以将单个行编码为JSON对象并发送它们,每次收到一行时,您都可以将其附加到表中。这也许是最好的方法,但它需要使用WebSocket,而您的技术堆栈可能不完全支持WebSocket。如果websockets不是一个选项,那么您可以尝试请求服务器允许的最小数据块中的数据,但这是非常昂贵的,因为每个请求都有开销,您最终会执行多个请求来获取数据

AFAIK无法在http请求完成之前开始解析,也无法部分解析JSON字符串。此外,获取数据要比处理数据慢几个数量级,因此不值得这么做

如果您需要解析大量数据,最好的选择是使用流式处理方法。

Lazy.js能够解析“streaming”JSON()。

您可以使用专门为此用例构建的方法

js是一个开源Javascript库,用于使用流媒体加载JSON,将DOM的便利性与SAX的速度和流动性结合起来

它可以将任何JSON解析为一个流,足够小,可以成为一个微库,没有依赖性,并且不关心需要它与哪些其他库进行对话


看一看。我想Github上的一些项目可能会不同意:解析流式JSON是可能的——但可能对初学者来说不是,而且这些都是Node.js项目,我不知道它们有什么样的浏览器支持。“除非您编写自己的解析器考虑到这一点,”我从来没有说过这是不可能的:)“你不能解析不完整或无效的JSON,除非你编写了自己的解析器来考虑这一点。”哈哈,这会更好一点吗?但是如果来自服务器的数据到达得慢一点,这会很有帮助。”差别几乎不明显“:你不知道这个。如果原始网格占用500MB的内存,而要处理的新JSON占用1GB的内存,其中990MB的内存最终被丢弃(比如,因为它已经在网格中,不需要添加),那么流式处理方法可能会在速度、内存使用率、以及,用户体验。@mwag你说得对,我很久以前(5年前)写过这篇文章。我不知道是否值得更改我的答案或完全删除它,因为原始海报不太可能仍在解决这个问题。因此,根据原始问题,接收完整对象确实更有意义,因为解析单个请求可能会有更大的开销(并行请求的数量是有限制的)而且我认为WebSocket或HTTP/2在当时都不是一回事