json_decode возвращает значение NULL, json_last_error_msg выдает «Ошибка управляющего символа, возможно, неправильно закодированный»

#php #json

#php #json

Вопрос:

Файл выглядит нормально при чтении в моем редакторе.

 $file = file_get_contents('path/to/file.json');
$json =  json_decode($file, true);
var_dump($json); // null
echo json_last_error_msg(); //Control character error, possibly incorrectly encoded
  

Существует не так много информации о том, что означает это сообщение об ошибке.

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

1. Не могли бы вы опубликовать свой file.json ? потому json_decode что не удается декодировать вашу строку json из файла.

2. Это означает, что ваш файл не содержит допустимый JSON.

3. На случай, если кто-то добрался сюда. «Я столкнулся с той же проблемой. Я обнаружил, что читаю 1024 символы, а вся длина строки была больше этого. И это было причиной проблемы. Затем обновление длины привело к проблеме «. Принятый ответ не помог.

Ответ №1:

вы можете удалить управляющий символ, PCRE поддерживает нотацию POSIX для классов символов [:cntrl:]

 $json = preg_replace('/[[:cntrl:]]/', '', $json);
$json = json_decode($json, true);
var_dump($json);
echo json_last_error_msg();
  

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

1. В общем, это неправильный подход. Просто представьте, что у вас есть следующая строка: «hello nworld», где n — неэкранированный (0x0a) символ. preg_replace исправит это, хотя вы останетесь с «helloworld». Вместо этого должен быть исправлен код, который выдает строку в формате json.