當名稱缺少雙引號時可以解析JSON嗎?該JSON是從谷歌來了,它在形式:解析JSON缺少名稱上的引號
{e:"Data",b:"Data",f:"Data"}
我不能告訴他們的谷歌JSON是無效的,因爲它可能是一個原因,他們的專有系統無效。當使用json_decode()時,它返回NULL。
他們的任何庫能夠以這種格式解析JSON嗎?
當名稱缺少雙引號時可以解析JSON嗎?該JSON是從谷歌來了,它在形式:解析JSON缺少名稱上的引號
{e:"Data",b:"Data",f:"Data"}
我不能告訴他們的谷歌JSON是無效的,因爲它可能是一個原因,他們的專有系統無效。當使用json_decode()時,它返回NULL。
他們的任何庫能夠以這種格式解析JSON嗎?
確實,這看起來無效。您可能想要考慮使用一段自定義的PHP代碼來添加引號。
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"
}
//序列化本地JavaScript對象JSON。引用關鍵名稱。密鑰=> '鍵'
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"}
我同意。一個簡單的preg_replace應該就足夠了。 – 2011-06-06 10:47:50