当名称缺少双引号时,是否可以解析JSON? JSON来自谷歌,它的形式为:
{e:"Data",b:"Data",f:"Data"}
我无法告知Google他们的JSON无效,因为它的专有系统可能无效。使用json_decode()时,它返回NULL。
他们的任何库是否能够以这种格式解析JSON?
答案 0 :(得分:5)
JSON是YAML的子集,因此任何有效的JSON语法都是有效的YAML语法。但是,YAML不需要在属性名称周围引用,因此YAML解析器将处理此内容。
我首选的YAML解析器是Symfony YAML component,您可以按如下方式使用:
<?php
include('yaml/lib/sfYaml.php');
var_dump(sfYaml::load('{e:"Data",b:"Data",f:"Data"}'));
输出:
array(3) {
["e"]=>
string(4) "Data"
["b"]=>
string(4) "Data"
["f"]=>
string(4) "Data"
}
答案 1 :(得分:3)
//将本机Javascript对象序列化为JSON。引用关键名称。键=&GT; '关键'
function fix_json( $j ){
$j = trim( $j );
$j = ltrim( $j, '(' );
$j = rtrim( $j, ')' );
$a = preg_split('#(?<!\\\\)\"#', $j );
for( $i=0; $i < count( $a ); $i+=2 ){
$s = $a[$i];
$s = preg_replace('#([^\s\[\]\{\}\:\,]+):#', '"\1":', $s );
$a[$i] = $s;
}
//var_dump($a);
$j = implode( '"', $a );
//var_dump( $j );
return $j;
}
示例:
$json = '{e:"Data",b:"Data",f:"Data"}';
echo fix_json($json);
输出:
{"e":"Data","b":"Data","f":"Data"}
答案 2 :(得分:0)
确实,这看起来无效。您可能想要考虑使用一段自定义PHP代码添加引号。