PHP добавить кавычки в массив для json_decode - PullRequest
4 голосов
/ 27 марта 2012

Я ищу json_decode для строки, но сталкиваюсь с проблемой, когда элементы массива не имеют кавычек.

JSON

{"Status":"DISPUTED","GUID":[]}
{"Status":"CONFIRMED","GUID":[G018712, G017623]}

PHP

$json = '{"Status":"CONFIRMED","GUID":[G018712,G017623]}';
$a = json_decode($json, true);
print $a['Status'];

Результаты

Приведенный выше отпечаток php ничего не отобразит, потому что в массиве есть буквы, смешанные с цифрами, и json_decode это не нравится. Как бы вы добавили строки к каждому элементу массива, чтобы json_decode работал?

1 Ответ

4 голосов
/ 27 марта 2012

Ваш json недействителен. Должно быть -

$json = '{"Status":"CONFIRMED","GUID":["G018712","G017623"]}';

или

$json = '{Status:"CONFIRMED",GUID:["G018712","G017623"]}';

Вы можете легко исправить это, используя-

$json = preg_replace('/(?<!")(?<!\w)(\w+)(?!")(?!\w)/', '"$1"', $json);

Полный пример

$json = '{"Status":"CONFIRMED","GUID":[G018712,G017623]}{"Status":"CONFIRMED","GUID":[018712,a017623]}';
// fix json
$json = preg_replace('/(?<!")(?<!\w)(\w+)(?!")(?!\w)/', '"$1"', $json);
$a = json_decode($json, true);
print $a['Status'];
...