如何在php preg_replace中用双引号将数字引起来?

时间:2018-12-06 08:23:22

标签: php arrays json string preg-replace

我有一个似乎无效的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是字符串,如何给所有数字加上引号。

1 个答案:

答案 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解码的数组