我在浏览器中有一个网格。
我想通过 JSON 将数据行发送到网格,但是浏览器应该在接收到 JSON 时不断地解析它,并在解析时将行添加到网格中。换句话说,在接收到整个 JSON 对象后,不应将行一次全部添加到网格中——它们应该在接收到时添加。
这可能吗?特别是使用 jQuery、Jackson 和 Spring 3 MVC?
这个想法有名字吗?我只看到网上很少记录这个想法。
我在浏览器中有一个网格。
我想通过 JSON 将数据行发送到网格,但是浏览器应该在接收到 JSON 时不断地解析它,并在解析时将行添加到网格中。换句话说,在接收到整个 JSON 对象后,不应将行一次全部添加到网格中——它们应该在接收到时添加。
这可能吗?特别是使用 jQuery、Jackson 和 Spring 3 MVC?
这个想法有名字吗?我只看到网上很少记录这个想法。
您可以使用专为此用例构建的Oboe.js。
Oboe.js 是一个开源 Javascript 库,用于使用流式加载 JSON,结合了 DOM 的便利性和 SAX 的速度和流动性。
它可以将任何 JSON 解析为流,小到足以成为一个微型库,没有依赖关系,并且不关心您需要它与哪些其他库通信。
Lazy.js 能够解析“流式”JSON(演示)。
您无法使用浏览器的JSON.parse
. 如果您正在流式传输文本,它总是会在某些时候尝试解析无效的 JSON,这将导致它失败。那里存在流式 JSON 解析器,您可能能够找到适合您需求的东西。
在您的情况下,最简单的方法仍然是为每一行发送完整的 JSON 文档。
2017 年 3 月更新:
Websockets 允许您维护与服务器的开放连接,您可以使用该连接将数据流式传输到表中。您可以将单个行编码为 JSON 对象并发送它们,每次收到一个时,您都可以将其附加到表中。这可能是最佳方式,但它需要使用您的技术堆栈可能不完全支持的 websocket。如果 websockets 不是一个选项,那么您可以尝试以服务器允许的最小块请求数据,但这很昂贵,因为每个请求都有开销,并且您最终会执行多个请求来获取数据。
AFAIK 无法在完成之前开始解析 http 请求,也无法部分解析 JSON 字符串。此外,获取数据比处理数据要慢几个数量级,因此不值得这样做。
如果您需要解析大量数据,最好的办法是使用流式处理方法。
查看SignalR。