Задать вопрос
Этот вопрос закрыт для ответов, так как повторяет вопрос Убрать в JSON ответе кавычки в кавычках?
GM_pAnda
@GM_pAnda
Бездельник

В json ответе ковычки нужно декодировать в PHР?

Доброго времени суток! Получаю с удалённого сервера ответ JSON
Но, иногда в некоторых ответах содержатся ковычки и функция json_decode ломается.
Вот JSON при котором ломается ответ
{"tx":"5204759","status":"SUCCESS","date":"04.07.2017","time":"21:53:27","cash":"7 210,00руб.","orig":"7 000,00руб.","provider":"WebmoneyОАОБанк"ККБ"","opnum":"R14702331","comment":""}

Как видите в provider имя банка в кавычках и из-за этого рушится JSON
Как быть?
  • Вопрос задан
  • 784 просмотра
Подписаться 1 Оценить 4 комментария
Ответы на вопрос 4
@balamyt92
; select * from users; --
Это не валидный JSON, попробуйте перед json_decode делать замену "" на \""

UPD: надо регулярками обрабатывать, простая замена не прокатит.
Ответ написан
Wolfnsex
@Wolfnsex Куратор тега PHP
Если не хочешь быть первым - не вставай в очередь!
Как видите в provider имя банка в кавычках и из-за этого рушится JSON Как быть?
а) Оптимально - Попросить того, кто писал удалённый сервис - исправить столь явный баг кодирования в JSON и намекнуть ему, что если он сам не может сделать нормально - пусть воспользуется готовыми библиотеками.
б) Костыль - примерно такой:
$json_string = str_replace ('""', '\"\"', $json_string)
Ответ написан
так попробуйте
$json = htmlspecialchars_decode($json);
$json = str_replace(' "', ' ', $json);
$json = str_replace('""', '"', $json);
Ответ написан
Keanor
@Keanor
Ведущий разработчик
Яб закостылил ;)
function no_json_decode($encoded) {
	$decoded = [];
	foreach (explode('","', trim($encoded, '{}')) as $element) {
		list($key, $value) = explode(':', $element);
		$decoded[trim($key, '"')] = trim($value, '"');
	}

	return $decoded;
}


Результат:
Array
(
    [tx] => 5204759
    [status] => SUCCESS
    [date] => 04.07.2017
    [time] => 21
    [cash] => 7 210,00руб.
    [orig] => 7 000,00руб.
    [provider] => WebmoneyОАОБанк"ККБ
    [opnum] => R14702331
    [comment] => 
)


Можно поиграть чтобы спасти последнюю кавычку в наименовании банка
Ответ написан
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы