解析名称上缺少引号的JSON

时间:2011-06-06 10:38:43

标签: php json

当名称缺少双引号时,是否可以解析JSON? JSON来自谷歌,它的形式为:

{e:"Data",b:"Data",f:"Data"}

我无法告知Google他们的JSON无效,因为它的专有系统可能无效。使用json_decode()时,它返回NULL。

他们的任何库是否能够以这种格式解析JSON?

3 个答案:

答案 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代码添加引号。