任何人都可以识别这种格式(如果它是标准格式),或者我应该手动分解它以获得数组吗?谢谢。
{ 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,
)发布于 2010-12-24 00:38:15
它是有效的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));将适用于您的示例。
但您不应使用它,因为当存在, { 或 inside值时,它将失败!
最安全的方法是自己构造一个解析器。
发布于 2010-12-24 00:35:46
在我看来,json序列化是相当标准的。:)
发布于 2010-12-24 00:45:59
错误的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);
}https://stackoverflow.com/questions/4520549
复制相似问题