我有一个似乎无效的json
{
"systemId": 4424,
"professional":88928,
"gate":532,
"mock":02,
"wish":"this",
"transaction_id":"eeases-323fasfse-asdfe33",
"channel": "API",
}
因此,它无法在php中转换为数组,我尝试了json lint并在02处显示错误。
经过一番研究,我发现json中从0开始的值是无效的。
当02用双引号“”引起来时,使用json_decode将其成功转换为数组。
所以我想知道,如何假设json是字符串,如何给所有数字加上引号。
答案 0 :(得分:1)
<?php
$data = '{
"systemId":4424,
"professional":88928,
"gate":532,
"mock":02,
"wish":"this",
"transaction_id":"eeases-323fasfse-asdfe33",
"channel": "API",
}';
$data = str_replace('}', '', str_replace('{', '', $data));
echo '<pre>';
$t = preg_match_all("/(?<=\:)(.*?)(?=\,)/", $data, $matches);
$i=0;
foreach($matches[1] as $key => $value){
if(is_numeric($value)){
$matches[1][$i] = '"'.$value .'"';
}
$data = str_replace($value, $matches[1][$i], $data);
$i++;
}
$data = rtrim(trim($data),','); //remove last comma
$data = '{'.$data .'}';
$data = json_decode($data,true);
print_r($data);
肮脏的解决方案,我同意100%的想法在得到响应之前“修复”您的json。
如果您真的必须采用这种方式在代码中修复json,那么上面的代码将为您提供帮助。
首先要修剪大括号的原因是为了使数据具有更清晰的字符串。完成所有步骤后,我将它们以最终格式连接起来。
代码的结果是:
Array
(
[systemId] => 4424
[professional] => 88928
[gate] => 532
[mock] => 02
[wish] => this
[transaction_id] => eeases-323fasfse-asdfe33
[channel] => API
)
从有效json解码的数组