Обратный слеш в json_decode

123
14 декабря 2020, 14:10

Есть текст(из БД), который нужно превратить в json. пример

$text = '[{"val":"4"}]';
$f = json_decode($text);

Все получилось, но если в нем встречается обратный слеш \ то все ломается. пример

$text = '[{"val":"4\4"}]';
$f = json_decode($text);

Нашел выход в функции stripslashes

Но это не особо подходит, т.к. она удаляет \. пример

Есть другой выход с сохранения \?

Answer 1

У вас некорректно закодирован JSON (либо передан с ошибкой).

По спецификации JSON в строке после символа \ не может стоять число 4. После \ допустимо использовать только:

  • " - кавычка, просто экранирование кавычки
  • \ - обратный слеш - экранирование для самого себя для однозначного распознавания символьных последовательностей с особым значением в строках
  • / - прямой
  • b - символ backspace
  • n - символ line feed (перевод строки)
  • r - символ carriage return (возврат каретки)
  • t - символ табуляции
  • u с последующими 4 HEX символами, обозначает соответствующий символ Unicode (этой формой записи допустимо заменить вышеуказанные символы, впрочем)

Так, \4 это некорректная запись.

Такой JSON не принимают ни парсер PHP, ни проверенный мной парсер в PostgreSQL. Его пытается обработать парсер JS в firefox, но не уверен по каким правилам. Cам JSON от этого корректным не станет.

Корректная запись должна быть:

[{"val":"4\\4"}]

И лучше здесь вам обратиться к источнику вашего JSON с вопросом почему он сформирован некорректно чем пытаться исправлять последствия.

Answer 2

Спец символы JSON

\b  Backspace (ascii code 08)
\f  Form feed (ascii code 0C)
\n  New line
\r  Carriage return
\t  Tab
\"  Double quote
\\  Backslash character
READ ALSO
Не меняется title в заголовке страницы bitrix

Не меняется title в заголовке страницы bitrix

Прошу помощиrequire($_SERVER["DOCUMENT_ROOT"]

127
SqLite: LIMIT — выдаёт синтаксическую ошибку

SqLite: LIMIT — выдаёт синтаксическую ошибку

Подскажите пожалуйста, как задать LIMIT, чтобы вывести на страницу определённое количество записейВот так не работает:

103
PHP - Выборка из нескольких баз данных

PHP - Выборка из нескольких баз данных

Перерыл все, что можно, но внятного ответа так и не нашелЗадача в следующем

106
Mediawiki невозможно редактировать common.css

Mediawiki невозможно редактировать common.css

Пытаюсь редактировать файл commoncss, но не позволяет, выдвигая следующую ошибку:

168