php json decode error

json_decode returns JSON_ERROR_SYNTAX but online formatter says the JSON is OK

I got a very strange problem.

I have a JSON webservice.

But when i load my JSON with this code :

I got the error : SYNTAX ERROR

WHICH IS NOT HELP FULL AT ALL.

(but i did not succeed to install PHP 5.5 yet, and i m not sure this function will give me more detail)

17 Answers 17

I faced the same issue, actually there are some hidden characters unseen and you need to remove it. Here’s a global code that works for many cases:

Removing the BOM (Byte Order Mark) is often-times the solution you need:

You shouldn’t have a BOM, but if it’s there, it is invisible so you won’t see it!!

use BOM Cleaner if you have lot’s of files to fix.

php json decode error. Смотреть фото php json decode error. Смотреть картинку php json decode error. Картинка про php json decode error. Фото php json decode error

php json decode error. Смотреть фото php json decode error. Смотреть картинку php json decode error. Картинка про php json decode error. Фото php json decode error

I solved this issue adding stripslashes to the string, before json_decode.

php json decode error. Смотреть фото php json decode error. Смотреть картинку php json decode error. Картинка про php json decode error. Фото php json decode error

To put all things together here and there, I’ve prepared JSON wrapper with decoding auto corrective actions. Most recent version can be found in my GitHub Gist.

php json decode error. Смотреть фото php json decode error. Смотреть картинку php json decode error. Картинка про php json decode error. Фото php json decode error

php json decode error. Смотреть фото php json decode error. Смотреть картинку php json decode error. Картинка про php json decode error. Фото php json decode error

json_decode(html_entity_decode($json_string));

I have the same problem, receiving JSON_ERROR_CTRL_CHAR and JSON_ERROR_SYNTAX.
This is my fix.

php json decode error. Смотреть фото php json decode error. Смотреть картинку php json decode error. Картинка про php json decode error. Фото php json decode error

After trying all the solution without the result this is the one worked for me.

Hope it will help someone

I had the same issues. I took the following steps:

changed the JSON text encoding

I then viewed the plain text before decoding. I found crazy symbols like

then I just stripped it off

and I successfully decoded my JSON

php json decode error. Смотреть фото php json decode error. Смотреть картинку php json decode error. Картинка про php json decode error. Фото php json decode error

You haven’t show your JSON but this sound like it could be an Invalid UTF-8 sequence in argument, most online validator wont catch it. make sure your data is UTF-8 and also check if you have foreign characters. You don’t need PHP5 to see your error, use error_log() to log the problems.

php json decode error. Смотреть фото php json decode error. Смотреть картинку php json decode error. Картинка про php json decode error. Фото php json decode error

please first clean json data and then load.

I faced this issue as well and it was so frustrating for me. after hours of trying different solutions on the internet. I noticed that the encoding of the file is in UTF-8 with BOM as var_dump() was echoing a weird character before the JSON.

Then you’ll see something like the below screenshot on your VSCode toolbar. (For json_decode() to work, the file has to be encoded in UTF-8)

php json decode error. Смотреть фото php json decode error. Смотреть картинку php json decode error. Картинка про php json decode error. Фото php json decode error

But in my case, the JSON file I created was having a UTF-8 with BOM encoding which is why when I was doing json_decode($json, true) it was returning null (Syntax Error when I var_dump(json_last_error_msg()) )

php json decode error. Смотреть фото php json decode error. Смотреть картинку php json decode error. Картинка про php json decode error. Фото php json decode error

php json decode error. Смотреть фото php json decode error. Смотреть картинку php json decode error. Картинка про php json decode error. Фото php json decode error

That will resave your file with UTF-8 encoding and you can go ahead and check your code. json_decode() will work fine. Can’t believe I spent hours trying to figure out what could be wrong.

Источник

Решение типовых проблем с json_encode (PHP)

Это краткая статья о наиболее вероятных проблемах с json_encode и их решениях. Иногда при кодировании данных в json, с помощью json_encode в php, мы получаем не тот результат который ожидаем. Я выделил три наиболее частые проблемы с которыми сталкиваются программисты:

Доступ к полям

Проблема заключается в том что json_encode имеет доступ только к публичным полям объекта. Например если у вас есть класс

то результатом выполнения следующего кода будет:

как видно в результирующий json были включены только публичные поля.
Что же делать если нужны все поля?

Решение

Для php = 5.4:
достаточно будет реализовать интерфейс JsonSerializable для нашего класса, что подразумевает добавление метода jsonSerialize который будет возвращать структуру представляющую объект для json_encode

Теперь мы можем использовать json_encode как и раньше

Почему не стоит использовать подход с toJson методом?

Многие наверно заметили что подход с созданием метода возвращающего json может быть использован и в версиях php >= 5.4. Так почему же не воспользоваться им? Все дело в том что ваш класс может быть использован как часть иной структуры данных

и результат уже будет совсем другой.
Также класс может использоваться другими программистами, для которых такой тип получение json-а с объекта может быть не совсем очевиден.

Что если у меня очень много полей в класcе?

В таком случае можно воспользоваться функцией get_object_vars

А если нужно private-поля, из класса, который нет возможности редактировать?

Может получиться ситуация когда нужно получить private поля (именно private, т.к. доступ к protected полям можно получить через наследование) в json-е. В таком случае необходимо будет воспользоваться рефлексией:

Кодировка текстовых значений

Кириллица и другие знаки в UTF8

Второй тип распространённых проблем с json_encode это проблемы с кодировкой. Часто текстовые значения которые нужно кодировать в json имеют в себе символы в UTF8 (в том числе кириллица) в результате эти символы будут представлены в виде кодов:

Отображение таких символов лечится очень просто — добавлением флага JSON_UNESCAPED_UNICODE вторым аргументом к функции json_encode:

Символы в других кодировках

Функция json_encode воспринимает строковые значения как строки в UTF8, что может вызвать ошибку, если кодировка другая. Рассмотрим маленький кусочек кода (данный пример кода максимально упрощен для демонстрации проблемной ситуации)

На первый взгляд ничего не предвещает проблем, да и что здесь может пойти не так? Я тоже так думал. В подавляющем большинстве случаев все будет работать, и по этой причине поиск проблемы занял у меня несколько больше времени, когда я впервые столкнулся с тем что результатом json_encode было false.

Как можно увидеть из ошибки: проблема с кодировкой переданной строки (это не UTF8). Решение проблемы очевидное — привести значение в UTF8

Цифровые значения

Последняя типовая ошибка связана с кодированием числовых значений.

Как известно php не строго типизированный язык и позволяет использовать числа в виде строки, в большинстве случаев это не приводит к ошибкам внутри php приложения. Но так как json очень часто используется для передачи сообщений между приложениями, такой формат записи числа может вызвать проблемы в другом приложении. Желательно использовать флаг JSON_NUMERIC_CHECK:

Уже лучше. Но как видим «3.0» превратилось в 3, что в большинстве случаев будет интерпретировано как int. Используем еще один флаг JSON_PRESERVE_ZERO_FRACTION для корректного преобразования в float:

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

Спасибо за прочтение.

Буду рад увидеть в комментариях описание проблем, с которыми вы сталкивались, что не были упомянуты в статье

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *