json_decode завершается ошибкой, когда строка json содержит \b

#php

#php

Вопрос:

Я пытаюсь декодировать следующую строку JSON с помощью json_decode. Декодирование завершается с ошибкой, поскольку строка содержит b .

 $json = '{
    "question": {
    "content": "$(2,4)$ : 2x-y=2\times \blue2-\pink4=0$ n res"       
        }}' ;

$result = json_decode($json);  
print_r($result);
  

Мне интересно, каков наилучший способ декодирования?

Ответ №1:

Ну, p это недопустимая escape-последовательность строк в JSON. Это должна быть двойная обратная косая черта. Это означает, что вы должны были использовать четырехкратную обратную косую черту для определения строки JSON в контексте PHP.

Обратная косая черта также ускользает в строках, заключенных в одинарные кавычки. Используйте print , чтобы увидеть, какую фактическую строку вы создали, прежде чем передавать ее json_encode .

Редактировать: b вряд ли является причиной. Это символ колокола. p однако это недопустимо. Смотрите http://json.org / для спецификации.

Комментарии:

1. Да, p является проблемой. Какие-либо фрагменты кода для очистки строки json, чтобы результирующий json соответствовал спецификации?

2. «очистка» — это не вещь. Нет способа надежно исправить все ошибки кодирования после факта. Исправьте ваше объявление строки.

3. ну, строка поступает из источника данных, и их 20 000. Поэтому исправление строки вручную не является вариантом.

4. Если строка на самом деле пришла «из источника данных» (не будьте такими расплывчатыми), как это, тогда она не нуждалась бы в исправлении. Проблема в том, что вы повторно объявляете ее как строку PHP здесь.