使用PHP进行无效的JSON解析

hoo*_*ter 3 php json

我正在提取无效JSON的JSON提要.它完全没有引用.我已经尝试了一些东西,比如explode()str_replace(),让字符串看起来更像有效的JSON,但内部有一个关联的JSON字符串,它通常会搞砸了.

这是一个例子:

id:43015,name:'John Doe',level:15,systems:[{t:6,glr:1242,n:'server',s:185,c:9}],classs:0,subclass:5
Run Code Online (Sandbox Code Playgroud)

是否有任何可以处理无效JSON的JSON解析器?

编辑:我正在尝试使用json_decode()此字符串.它什么都不返回.

Mar*_*rko 10

  1. 所有引号都应该是双引号"而不是单引号'.
  2. 应引用所有密钥.
  3. 整个元素应该是一个对象.
    function my_json_decode($s) {
        $s = str_replace(
            array('"',  "'"),
            array('\"', '"'),
            $s
        );
        $s = preg_replace('/(\w+):/i', '"\1":', $s);
        return json_decode(sprintf('{%s}', $s));
    }


Mar*_*mos 5

根据我的经验,Marko的答案不再适用.对于较新的PHP版本使用此istead:

$a = "{id:43015,name:'John Doe',level:15,systems:[{t:6,glr:1242,n:'server',s:185,c:988}],classs:0,subclass:5}";
$a = preg_replace('/(,|\{)[ \t\n]*(\w+)[ ]*:[ ]*/','$1"$2":',$a);
$a = preg_replace('/":\'?([^\[\]\{\}]*?)\'?[ \n\t]*(,"|\}$|\]$|\}\]|\]\}|\}|\])/','":"$1"$2',$a);
print_r($a);
Run Code Online (Sandbox Code Playgroud)


Guy*_*Guy 5

这个正则表达式可以解决问题

$json = preg_replace('/([{,])(\s*)([A-Za-z0-9_\-]+?)\s*:/','$1"$3":',$json);
Run Code Online (Sandbox Code Playgroud)