任何人都可以识别这种格式(如果它是标准格式),还是应该手动爆炸才能获得数组?感谢。
{ coords : {lon : 7.41891, lat : 43.73253}, address : "", zipCode : "98000", city : "Monaco", sK : "Monaco", sQ : "852", fV : "", fZ : "98000 Monaco", fW : "- MC - Monaco: Monaco (98000)", gf : "31NDFzeHoxMGNORE11TnpNeU5UTT1jTnk0ME1UZzVNUT09", reflexId : "84167", areaLabel : "Monaco", jalon : 4}
YAML to VarExport给出了这个但后来失败了。
array (
'coords' =>
array (
'lon' => 20.48406,
'lat' => 44.80572,
),
)
解决方案:
$data = preg_replace('#([\w]+) :#is', '"$1" :', $data);
结果:
array (
'coords' =>
{
'lon' => 7.41891,
'lat' => 43.73253,
},
'address' => '',
'zipCode' => '98000',
'city' => 'Monaco',
'sK' => 'Monaco',
'sQ' => '852',
'fV' => '',
'fZ' => '98000 Monaco',
'fW' => '- MC - Monaco: Monaco (98000)',
'gf' => '31NDFzeHoxMGNORE11TnpNeU5UTT1jTnk0ME1UZzVNUT09',
'reflexId' => '84167',
'areaLabel' => 'Monaco',
'jalon' => 4,
)
答案 0 :(得分:2)
它是有效的JavaScript代码,几乎 JSON。要使它成为有效的JSON,它需要将对象属性名称括在双引号中,并用逗号分隔数组项。
此:
$text = preg_replace('/(\r?\n){2}/', ',', trim($text));
$text = preg_replace('/([{,])\s?([a-z0-9_]+)\s?:/i', '$1"$2":',$text);
print_r(json_decode($text));
将适用于您的示例。
但是你不应该使用它,因为当内部有,
或{
值时它会失败!
最安全的方法是自己构建一个解析器。
答案 1 :(得分:0)
看起来像json序列化给我,所以相当标准。 :)
答案 2 :(得分:0)
Bad JSON。我会将哈希键转换为字符串然后json_decode
。你可以很简单地使用PHP Tokenizer来做到这一点。
function parse($code) {
$result = '';
$tokens = tokens_get_all('<?php ' . $code);
array_shift($tokens); // drop <?php
foreach ($tokens as $token) {
if (!is_array($token)) {
$result .= $token;
continue;
}
if ($token[0] == T_STRING) {
$token[1] = '\'' . addslashes($token[1]) . '\'';
}
$result .= $token[1];
}
return json_decode($result);
}
答案 3 :(得分:0)
经过一些研究,它看起来肯定是格式不正确的JSON。但是,它并不太遥远。事实上,使用两个正则表达式,您可以轻松地将字符串转换为正确的JSON。
Find:
/(\w+)\s+\:/
Replace:
"$1" :
Find:
/(})(\s+{)/
Replace:
$1,$2
你可以在PHP中这样做:
$good_json = preg_replace(array('/(\w+)\s+\:/i','/(})(\s+{)/'), array('"\1" :', '\1,\2'), $bad_json);
var_dump( json_decode($good_json) );