什么是解析未分离(无效)json字符串的最佳方法?

时间:2016-09-26 12:00:31

标签: php json parsing

我想把一些json响应解析成php数组,问题是nginx push stream模块响应没有分离json字符串,有可能不用正则表达式解析这个吗?

'{"id":1,"channel":"1","text":"Hello World!"}{"id":2,"channel":"1","text":"Hello World!"}{"id":2,"channel":"1","text":{"key_x": "value_x"}}'

修改

真正的问题是nginx推送流模块在流中发送存档,这就是为什么我的片段中的json数据之间没有分隔符。

2 个答案:

答案 0 :(得分:2)

$str = '{"id":1,"channel":"1","text":"Hello World!"}{"id":2,"channel":"1","text":"Hello World!"}{"id":2,"channel":"1","text":"Hello World!"}';

$str = str_replace('}{', '},{', $str);
$str = '[' . $str . ']';

print_r(json_decode($str));

https://3v4l.org/BNVTg

答案 1 :(得分:0)

我认为如果不改变输出或使用regex / str_replace,这实际上是可行的。

如果您可以控制输出,则应将输出更改为有效的json:

{"data":[
    {"id":1,"channel":"1","text":"Hello World!"},
    {"id":2,"channel":"1","text":"Hello World!"},
    {"id":2,"channel":"1","text":"Hello World!"}
]}

你不能这样做然后你可以尝试使用str_replace与爆炸:

$data = str_replace('}{', '}<should_be_absolut_unique>{');
foreach( explode('<should_be_absolut_unique>', $data) as $json ){
    # json_decode($json)
}

这当然是非常不可取的,并且不能保证能够正常工作,因为如果您不知道发送的数据,您不知道字符串替换是否正常工作!