Конвертировать недействительный JSON в действительный JSON в PHP

0

Я сохраняю некоторые значения в базе данных через 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"
            }
           }';
  • 0
    Чтобы уточнить - дополнительные цитаты действительно существуют в базе данных, правильно?
  • 2
    Почему бы просто не изменить причину для дополнительного " вместо того, чтобы найти способ удалить его? Создайте временный php-скрипт для редактирования каждого входного сохранения в базе данных и измените файл, который добавляет дополнительный "
Показать ещё 6 комментариев
Теги:

2 ответа

0

Для этого конкретного случая это будет делать:

<?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 ^^

-2

Каким образом это может быть недействительным? Если только наличие двойных кавычек просто использует preg_replace:

$valid = preg_replace('/""/','"',$invalid);
  • 2
    "detail": "", будет изменено на "detail": ", что неверно

Ещё вопросы

Сообщество Overcoder
Наверх
Меню