如何将类JSON格式字符串转换为PHP数组?
解决类JSON字符串转PHP数组的问题
这种类JSON字符串我之前也碰到过,核心问题就是键名没加双引号,不符合标准JSON的要求,直接用json_decode()肯定转不出来,得先把它改成标准格式才行。下面给你两种靠谱的处理方案:
方法一:正则替换转标准JSON(推荐)
因为你的键名都是lng、lat这类简单的字母标识符,用正则匹配所有键名:的格式,给键名加上双引号就能转成标准JSON,再解码成数组就很简单了:
// 假设这是你获取到的类JSON字符串 $nonStandardJson = '[{lng: -0.000000, lat: 10.000000},{lng: -0.000000, lat: 10.000000},{lng: -0.000000, lat: 10.000000},{lng: -0.000000, lat: 10.000000}]'; // 正则匹配键名,给它加上双引号 $standardJson = preg_replace('/(\w+):/', '"$1":', $nonStandardJson); // 解码成PHP关联数组(第二个参数true表示转数组,而非对象) $coordsArray = json_decode($standardJson, true); // 检查解码是否成功 if (json_last_error() === JSON_ERROR_NONE) { print_r($coordsArray); // 这里就能看到转好的数组啦 } else { echo 'JSON解码失败:' . json_last_error_msg(); }
方法二:用eval应急(谨慎使用)
如果你的字符串来源绝对安全(比如是自己系统生成的,不会有恶意代码),可以用eval直接把类JSON转成PHP数组,但这个方法有安全风险,万一字符串里混了恶意代码会被执行,所以尽量不用:
$nonStandardJson = '[{lng: -0.000000, lat: 10.000000},{lng: -0.000000, lat: 10.000000},{lng: -0.000000, lat: 10.000000},{lng: -0.000000, lat: 10.000000}]'; // 把类JSON的{}改成PHP数组的[],再用eval执行 $coordsArray = eval('return ' . str_replace(['{', '}'], ['[', ']'], $nonStandardJson) . ';'); print_r($coordsArray);
划重点:
eval方法一定要谨慎,只有完全信任字符串来源时才考虑用,优先选第一种正则方案,安全又稳定。
内容的提问来源于stack exchange,提问作者user7236046
相关产品推荐
相关产品推荐

