Я сохраняю некоторые значения в базе данных через api (поэтому я не могу изменить его вручную)
Когда я верну его из базы данных, значение json не соответствует действительности. Я не хочу изменять каждое значение в базе данных. Я хочу что-то в php, которое может преобразовать это в допустимый формат.
Что-то вроде этого в моем db:
$invalid='{
"response": {
"id": "16"", <--------------------- Invalid Format(It can be for any key)
"event_name": "testing",
"image": "images/Penguins.jpg",
"event_date": "2014-12-13",
"event_time": "02:10",
"time_interval": "4",
"location": "mohali",
"event_type": "Rock",
"detail": "sfdsf fgf ghb\t",
"delivery": "dggh fghgfh\t\t",
"status": "1"
}
}';
Итак, как я могу преобразовать его в действительный json по php следующим образом:
$invalid='{
"response": {
"id": "16", <--------------------- valid Format
"event_name": "testing",
"image": "images/Penguins.jpg",
"event_date": "2014-12-13",
"event_time": "02:10",
"time_interval": "4",
"location": "mohali",
"event_type": "Rock",
"detail": "sfdsf fgf ghb\t",
"delivery": "dggh fghgfh\t\t",
"status": "1"
}
}';
Для этого конкретного случая это будет делать:
<?php
$invalid='{
"response": {
"id": "16"",
"event_name": "testing",
"image": "images/Penguins.jpg",
"event_date": "2014-12-13",
"event_time": "02:10",
"time_interval": "4",
"location": "",
"event_type": "Rock"",
"detail": "sfdsf fgf ghb\t",
"delivery": "dggh fghgfh\t\t",
"status": "1""
},
"bar":{ "test": ""
}
}';
$invalid = explode("\n",$invalid);
foreach($invalid as $idx => &$line) {
$num = 0;
for($z=0;$z<strlen($line);++$z) {
$ch = $line[$z];
if($ch == "\\") {
++$z;
} else if($ch == '"') {
++$num;
$last_pos = $z;
}
}
if($num % 2 == 1) {
$line[$last_pos] = ' ';
}
}
$valid = implode("\n",$invalid);
print_r($valid);
Вывод:
{
"response": {
"id": "16" ,
"event_name": "testing",
"image": "images/Penguins.jpg",
"event_date": "2014-12-13",
"event_time": "02:10",
"time_interval": "4",
"location": "",
"event_type": "Rock" ,
"detail": "sfdsf fgf ghb\t",
"delivery": "dggh fghgfh\t\t",
"status": "1"
},
"bar":{ "test": ""
}
}
Но действительно рекомендуется исправить данные в базе данных и форму/код, которые производят эти недопустимые JSON
^^
Каким образом это может быть недействительным? Если только наличие двойных кавычек просто использует preg_replace:
$valid = preg_replace('/""/','"',$invalid);
"detail": "",
будет изменено на "detail": ",
что неверно
"
вместо того, чтобы найти способ удалить его? Создайте временный php-скрипт для редактирования каждого входного сохранения в базе данных и измените файл, который добавляет дополнительный"