如何在php preg_替换中用双引号括起数字?

如何在php preg_替换中用双引号括起数字?,php,arrays,json,string,preg-replace,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,它似乎是无效的

{
        "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_解码的数组

所以我想知道,假设json是一个字符串,我怎么能给number all添加引号呢

<?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);

从有效json解码的数组

的“通道”末尾还有一个额外的逗号“:“API”,
。因此,我认为最好是尝试修复源代码,而不是破坏结果。尝试
$s=preg\u replace(“~”:\s*\K0+(?=[1-9]\d*,)~”,“,$s)
。但是正则表达式方法可能不安全。您想
preg\u替换此无效值吗?是否生成JSON文件?如果是,我将修复生成JSON的代码,改为使用[“”was]成功转换的代码
02
如何向[所有数字]添加引号
你确定这会让你达到你想要的目的吗?嗨@greybeard,是的,我知道“02左右就足够了,但我不想知道具体案例的答案,我愿意学习一些新东西。非常感谢你的努力。100%尝试!不客气,我希望你的问题得到解决。让我知道进展如何。嗨@pr1nc3,我得到了{“systemId”:4424,“专业”:“88928”,“门”:“532”,“模拟”:“02”,“愿望”:“此”,“事务id”:“eeases-323fasfse-asdfe33”,“通道”:“API”}在json解码之前,但在json解码之后,我使用完全相同的“json”“你提供的服务很好。你确定你没有修改任何代码,因为我仍然可以看到最后一个字段中的逗号,即使我在代码中对它进行了修剪。最后一个逗号打断json并使其无效,因此无法解码为数组。确保您没有删除我的rtrim函数。是的,逗号是问题所在,完成!谢谢
Array
(
    [systemId] => 4424
    [professional] => 88928
    [gate] => 532
    [mock] => 02
    [wish] => this
    [transaction_id] => eeases-323fasfse-asdfe33
    [channel] => API
)