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

How to surround numbers with double quotes in php 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 是一个字符串,我如何给数字添加引号。

<?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% 同意 "fix" 你的 json 在你得到回应之前的想法。

如果您真的必须用那种方式在代码中修复 json,上面的代码将帮助您。

我首先修剪大括号的原因是为了让数据字符串更清晰。当我完成所有需要完成的事情后,我将它们连接成最终格式。

代码的结果是:

Array
(
    [systemId] => 4424
    [professional] => 88928
    [gate] => 532
    [mock] => 02
    [wish] => this
    [transaction_id] => eeases-323fasfse-asdfe33
    [channel] => API
)

从有效 json

解码的数组