我正在提取无效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
"而不是单引号'.
function my_json_decode($s) {
$s = str_replace(
array('"', "'"),
array('\"', '"'),
$s
);
$s = preg_replace('/(\w+):/i', '"\1":', $s);
return json_decode(sprintf('{%s}', $s));
}
根据我的经验,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)
这个正则表达式可以解决问题
$json = preg_replace('/([{,])(\s*)([A-Za-z0-9_\-]+?)\s*:/','$1"$3":',$json);
Run Code Online (Sandbox Code Playgroud)