在一个PHP程序中,我想要逐步解析JSON。例如,给定部分JSON。
我希望在JSON输入的其余部分被流式传输之前即可获得1、2和字典。PHP的
[1, 2, {"id": 3},
我希望在JSON输入的其余部分被流式传输之前即可获得1、2和字典。PHP的
json_decode
仅返回NULL
,似乎没有办法获取错误的位置。[1, 2, {"id": 3},
json_decode
仅返回NULL
,似乎没有办法获取错误的位置。更新
我写了一个小类,可以进行逐字符的JSON输入解析。 https://github.com/janeklb/JSONCharInputReader
这是最新的版本,可能还存在一些bug。如果你决定尝试它,请告诉我!
--
您能否在跟踪 '{'、'[', ']', '}' 范围的同时,在每个不是字符串值的逗号处将流分割? 然后使用json_decode()处理每个标记?
如果 JSON 流中没有大量的大对象(它们只会在到达完整时才被解析),那么这个解决方案将效果最佳。
编辑:如果有大型对象,则可以修改此策略以进行更深层次的查找 ... 但这里的复杂性会增加。
如果每个单独的元素都保证完整接收,或者换句话说 - 你不能只接收一个对象的一半,那么有一个简单的解决方法:
{"a": 1,
json_decode()
会返回NULL,因为你传递给它的字符串不是一个有效的JSON字符串。将末尾的逗号替换为闭合括号就可以了:
[1, 2, {"id": 3}]
现在解码它没有问题,稍后等待接收流的其他部分即可。