Как окружить числа двойными кавычками в php preg_replace? - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть json, который кажется недействительным

{
        "systemId": 4424, 
        "professional":88928, 
        "gate":532, 
        "mock":02,
        "wish":"this", 
        "transaction_id":"eeases-323fasfse-asdfe33", 
        "channel": "API", 
    }

Поэтому, следовательно, он не может быть преобразован в массив в php, я пробовал json lint, и он показывает ошибку в 02.

После некоторых исследований я узнал, что значение, начинающееся с 0 в json, недопустимо.

Когда я заключаю 02 в двойные кавычки "", оно было успешно преобразовано в массив с использованием json_decode.

Так что мне интересно, как я могу добавить к числу кавычки, предполагая, что json является строкой.

1 Ответ

0 голосов
/ 06 декабря 2018
<?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, прежде чем вы получите ответ.

Если вам действительно нужно пойти по этому пути, чтобы исправить свой json внутри кода, приведенный выше код поможет вам в этом.

Причина, по которой я сначала обрезаю фигурные скобки, состоит в том, чтобы иметь более четкую строку с данными.Я объединяю их в окончательном формате, когда я сделал все, что нужно сделать.

Результат кода:

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

Массив, декодированный из действительного json

...