php中的增量JSON解析

时间:2011-09-05 18:03:43

标签: php json streaming

在php程序中,我想逐步解析JSON。例如,给定部分JSON

[1, 2, {"id": 3},

我希望在流式传输剩余的JSON输入之前获得1,2和字典。 php的json_decode只返回NULL,似乎无法找到错误的位置。

3 个答案:

答案 0 :(得分:6)

<强>更新

我写了一个小类,它通过char-by-char JSON输入解析.. https://github.com/janeklb/JSONCharInputReader

新鲜的印刷机,所以它可能有一些错误..如果你决定尝试一下,请告诉我!

-

你可以(在跟踪'{','[',']','}'范围的同时)在不是字符串值的每个逗号上打破流吗? 然后使用json_decode()处理每个令牌?

如果json流没有很多大对象(因为它们只有在完全到达时才会被解析),这个解决方案最有效。

编辑:如果它确实有大型对象,可以修改此策略以使其看起来更“深”......但这里的复杂性会上升。

答案 1 :(得分:3)

我写了SAX-like JSON streaming parser应该可以解决这个问题。让我知道它是否有效!

答案 2 :(得分:1)

有一个简单的解决方法,如果保证每个单独的元素都被完整地接收,或者换句话说 - 你不能得到例如只是这样一个对象的一半:

{"a": 1,

json_decode()将返回NULL,因为您传递给它的字符串不是有效的JSON字符串。用尾部括号替换尾部逗号,然后你去:

[1, 2, {"id": 3}]

现在解码它没有问题,等待稍后接收流的其他部分。