Страницы

Поиск по вопросам

понедельник, 16 декабря 2019 г.

Проблемы с json_decode

#php #json


Имеется следующий json объект:

{
    "ИД": "0f126618-6606-11e7-b4c8-005056c00008",
    "НоменклатураИД": "af0412c1-2feb-11e7-8c78-005056c00008",
    "Наименование": "1712 Миа",
    "ДатаИзменения": "0001-01-01T00:00:00",
    "Описание": "",
    "Meta_title": "",
    "Meta_description": "",
    "Meta_keyword": "",
    "Теги": "",
    "ТканьРегион": "1712 Миа",
    "СайтАртикул": "1712",
    "СайтСтиль": "Жаккардовый",
    "СайтАкция": "Нет",
    "СайтПоказыватьВМагазине": "Да"
}


Функция json_decode выводит NULL при попытке вардампа
Но при этом вот такой json объект она нормально декодирует:

{
    "ИД": "8574a44b-2b1a-11e7-8c78-005056c00008",
    "Наименование": "КПБ \"Дуэт\" [Бамбук-жаккард)",
    "НаименованиеПолное": "КПБ \"Дуэт\" [Бамбук-жаккард)",
    "Артикул": "360/0034295",
    "ЕдиницаИзмеренияКод": "796",
    "ЕдиницаИзмеренияНаименование": "шт",
    "ВестиУчетПоХарактеристикам": true
}


В чем может быть проблема?
    


Ответы

Ответ 1



Вам присылают метку BOM - byte order mark. Конкретно EFBBBF характерна для UTF8. Но json_decode не ожидает такой метки и потому считает документ невалидным. Метку можно безопасно удалять: if (substr_compare($json, "\xEF\xBB\xBF", 0) > 0) { $json = substr($json, 3); } Вообще от этот метки часто проблемы встречаются. Нередко стандарты кодирования (PSR стандарты PHP в том числе) требуют не использовать эту метку.

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

Отправить комментарий