php json decode возвращает null

JSON_DECODE возвращает NULL из ответа cURL, хотя формат кодирования кажется правильным?

РЕДАКТИРОВАТЬ: Для решения см. Ответ от Barmar ниже. Надеюсь, что это помогает любому с подобной проблемой.

-Если я var_dump (trim ($ contents)), он показывает (отформатированный точно так, как показано):

-Я пробовал обрезать, utfencoding, iconv, устанавливать заголовки curl и буквально все, что я видел, рекомендованный на других постах здесь.

Любая помощь будет принята с благодарностью. Заранее спасибо, ребята.

РЕДАКТИРОВАТЬ: Для решения см. Ответ от Barmar ниже. Надеюсь, что это помогает любому с подобной проблемой.

Решение

index.php печатает HTML до JSON (вы не подозревали, когда var_dump() сказал, что строка длиной 365 символов, но вы можете увидеть только около 50?). Когда сценарий используется для возврата JSON, он не может производить никаких других выходных данных.

Так что проверяйте data параметр перед печатью любого вывода. И если он найден, выйдите из сценария после отправки JSON, чтобы не печатать HTML.

Возможно, более простым решением было бы поместить код, который возвращает logInfo() в другой скрипт.

Другие решения

Несколько вещей, которые я бы порекомендовал. Не рекомендуется определять класс внутри функции. Вы должны иметь свой класс в отдельном файле. Это помогает сохранить ваш код организованным.

Во-вторых, для определения классов / методов / функций и т. Д. Целесообразно использовать либо случай змеи, либо случай верблюда.

Случай змеи, например: my_function_name_to_execute
Случай верблюда, например: MyFunctionNameToExecute

Источник

PHP json_decode() возвращает NULL с действующим JSON?

У меня есть этот объект JSON, хранящийся в текстовом файле:

Я тестировал JSON против http://jsonlint.com/, и это совершенно верно.

Решение

Ищем ответы на Google, я вернулся к SO: json_decode возвращает NULL после вызова webservice. В моем файле JSON была последовательность UTF BOM (некоторые двоичные символы, которые не должны быть там), таким образом, нарушая структуру JSON. Пошел в Hex Editor, удалил байты. Все в порядке. Почему это произошло? Потому что я редактировал файл с помощью Microsoft Windows ‘Notepad. Ужасная идея!

ОТВЕТЫ

Ответ 1

Обновление: проблема решена, посмотрите на пункт «Решение» в вопросе.

Ответ 2

Это сработало для меня

Ответ 3

Вы можете очистить его, используя

Затем вы можете использовать:

print_r отобразит массив.

Ответ 4

Вы можете попробовать.

Ответ 5

У меня была та же проблема, и я решил ее просто путем замены символа кавычки перед декодированием.

Значение моего JSON генерировалось функцией JSON.stringify.

Ответ 6

Возможно, некоторые скрытые символы возились с вашим json, попробуйте следующее:

Ответ 7

сделал это для меня. И да, тестирование в Chrome. спасибо to user2254008

Ответ 8

Просто подумал, что добавлю это, потому что сегодня столкнулся с этой проблемой. Если в вашей строке JSON есть строка, json_decode вернет NULL.

Если вы вытаскиваете JSON из источника, отличного от переменной PHP, было бы разумно сначала «обрезать» его:

Ответ 9

это поможет вам понять, каков тип ошибки

Ответ 10

Как указано Jürgen Math, используя метод preg_replace, указанный пользователем2254008, он исправил его и для меня.

Это не ограничивается Chrome, это проблема с преобразованием набора символов (по крайней мере, в моем случае, Unicode → UTF8). Это фиксировало все проблемы, которые у меня были.

Будущим node, JSON Object я был декодированием, исходил из функции Python json.dumps. Это, в свою очередь, привело к тому, что некоторые другие антисанитарные данные пробились, хотя с этим легко справились.

Ответ 11

Если вы получаете json из базы данных, поместите

Ответ 12

Просто сохраните один раз. Я потратил 3 часа, чтобы узнать, что это просто проблема с кодировкой html. Попробуйте это

Ответ 13

Здесь вы можете найти небольшую обертку JSON с корректирующими действиями, которые устраняют проблему спецификации и не-ASCI: fooobar.com/questions/100087/.

Ответ 14

Я решил эту проблему, распечатав JSON, а затем проверив источник страницы (CTRL/CMD + U):

до (удалить функцию htmlentities())

Ответ 16

Для моего случая это из-за одинарных кавычек в строке JSON.

Формат JSON принимает только двойные кавычки для ключей и строковых значений.

Я запутался из-за синтаксиса Javascript. В Javascript, конечно, мы можем сделать так:

но позже, когда преобразовать эти объекты в строку JSON:

Источник

json_decode

(PHP 5 >= 5.2.0, PHP 7, PHP 8, PECL json >= 1.2.0)

json_decode — Декодирует строку JSON

Описание

Принимает закодированную в JSON строку и преобразует её в переменную PHP.

Список параметров

Строка ( string ) json для декодирования.

Эта функция работает только со строками в кодировке UTF-8.

PHP реализует надмножество JSON, который описан в первоначальном » RFC 7159.

Максимальная глубина вложенности структуры, для которой будет производиться декодирование.

Возвращаемые значения

Список изменений

Примеры

Пример #1 Примеры использования json_decode()

Результат выполнения данного примера:

Пример #2 Доступ к свойствам объектов с неправильными именами

Доступ к элементам объекта, которые содержат символы, недопустимые в соответствии с соглашением об именах PHP (то есть дефис), может быть выполнен путём обрамления имени элемента фигурными скобками и апострофами.

Пример #3 Распространённая ошибка при использовании json_decode()

// Следующие строки являются валидным кодом JavaScript, но не валидными JSON-данными

Пример #4 Ошибки с глубиной вложенных объектов ( depth )

Результат выполнения данного примера:

Пример #5 json_decode() с большими целыми числами

Результат выполнения данного примера:

Примечания

В случае возникновения ошибки декодирования можно использовать json_last_error() для определения её причины.

Смотрите также

Источник

json_encode is returning NULL?

For some reason the item «description» returns NULL with the following code:

Here is the schema for my database:

Here is what is echoed out on the page:

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

10 Answers 10

I bet you are retrieving data in non-utf8 encoding: try to put mysql_query(‘SET CHARACTER SET utf8’) before your SELECT query.

If you have at least PHP 5.5, you can use json_last_error_msg(), which will return a string describing the problem.

If you don’t have 5.5, but are on/above 5.3, you can use json_last_error() to see what the problem is.

It will return an integer, that you can use to identify the problem in the function’s documentation. Currently (2012.01.19), the identifiers are:

These can change in future versions, so it’s better to consult the manual.

If you are below 5.3, you are out of luck, there is no way to ask what the error was.

ntd’s anwser didn’t solve my problem. For those in same situation, here is how I finally handled this error: Just utf8_encode each of your results.

few day ago I have the SAME problem with 1 table.

If last line returns 5, problem is with your data. I know, your tables are in UTF-8, but not entered data. For example the input was in txt file, but created on Win machine with stupid encoding (in my case Win-1250 = CP1250) and this data has been entered into the DB.

Solution? Look for new data (excel, web page), edit source txt file via PSPad (or whatever else), change encoding to UTF-8, delete all rows and now put data from original. Save. Enter into DB.

You should pass utf8 encoded string in json_encode. You can use utf8_encode and array_map() function like below:

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

For anyone using PDO, the solution is similar to ntd’s answer.

From the PHP PDO::__construct page, as a comment from the user Kiipa at live dot com:

To get UTF-8 charset you can specify that in the DSN.

$link = new PDO(«mysql:host=localhost;dbname=DB;charset=UTF8«);

AHHH. This looks so wrong it hurts my head. Try something more like this.

Perhpas there are some special chars in there that are mucking things up.

Источник

Решение типовых проблем с 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 не будет опубликован. Обязательные поля помечены *