У меня есть этот объект JSON, хранящийся в текстовом файле:
{
"MySQL": {
"Server": "(server)",
"Username": "(user)",
"Password": "(pwd)",
"DatabaseName": "(dbname)"
},
"Ftp": {
"Server": "(server)",
"Username": "(user)",
"Password": "(pwd)",
"RootFolder": "(rf)"
},
"BasePath": "../../bin/",
"NotesAppPath": "notas",
"SearchAppPath": "buscar",
"BaseUrl": "http:\/\/montemaiztusitio.com.ar",
"InitialExtensions": [
"nem.mysqlhandler",
"nem.string",
"nem.colour",
"nem.filesystem",
"nem.rss",
"nem.date",
"nem.template",
"nem.media",
"nem.measuring",
"nem.weather",
"nem.currency"
],
"MediaPath": "media",
"MediaGalleriesTable": "journal_media_galleries",
"MediaTable": "journal_media",
"Journal": {
"AllowedAdFileFormats": [
"flv:1",
"jpg:2",
"gif:3",
"png:4",
"swf:5"
],
"AdColumnId": "3",
"RSSLinkFormat": "%DOMAIN%\/notas\/%YEAR%-%MONTH%-%DAY%\/%TITLE%/",
"FrontendLayout": "Flat",
"AdPath": "ad",
"SiteTitle": "Monte Maíz: Tu Sitio",
"GlobalSiteDescription": "Periódico local de Monte Maíz.",
"MoreInfoAt": "Más información aquí, en el Periódico local de Monte Maíz.",
"TemplatePath": "templates",
"WeatherSource": "accuweather:SAM|AR|AR005|MONTE MAIZ",
"WeatherMeasureType": "1",
"CurrencySource": "cotizacion-monedas:Dolar|Euro|Real",
"TimesSingular": "vez",
"TimesPlural": "veces"
}
}
Когда я пытаюсь его декодировать json_decode()
, он возвращает NULL. Зачем? Файл доступен для чтения (я пробовал повторить эхо, file_get_contents()
и он работал нормально).
Я тестировал JSON на http://jsonlint.com/, и это совершенно верно.
Что здесь не так?
Решение
В поисках ответов в Google я вернулся к SO: json_decode возвращает NULL после вызова веб-сервиса . В моем файле JSON была последовательность UTF BOM (некоторые двоичные символы, которых там не должно быть), что нарушало структуру JSON. Зашел в Hex Editor, стер байты. Все вернулось в норму. Почему это произошло? Потому что я редактировал файл с помощью Блокнота Microsoft Windows. Ужасная идея!
json_last_error()
.Ответы:
Это может быть кодировка специальных символов. Вы можете попросить json_last_error () получить определенную информацию.
источник
json_last_error()
потому что это PHP 5.2.9. Эта функция присутствует в PHP 5.3.0.utf8_decode()
сначалаjson_decode()
пропущу текст , то молча терпит неудачу.Это сработало для меня
источник
Вы можете попробовать.
источник
stripslashes()
дважды, в результате чего были удалены существенные косые черты и возникла недействительная строка JSON. Этот ответ помог мне обнаружить ошибкуЕсли вы проверите запрос в Chrome, вы увидите, что JSON - это текст, поэтому в JSON был добавлен пустой код.
Вы можете очистить его, используя
$k=preg_replace('/\s+/', '',$k);
Тогда вы можете использовать:
json_decode($k)
print_r
затем покажет массив.источник
$k=preg_replace('/\s+/', ' ',$k);
У меня была такая же проблема, и я решил ее, просто заменив символ кавычки перед декодированием.
Мое значение JSON было создано функцией JSON.stringify.
источник
Возможно, некоторые скрытые персонажи возятся с вашим json, попробуйте следующее:
источник
сделал это для меня. И да, тестирование в Chrome. Спасибо пользователю2254008
источник
Просто подумал, что добавлю это, так как сегодня столкнулся с этой проблемой. Если строку JSON окружают какие-либо строковые отступы, json_decode вернет NULL.
Если вы извлекаете JSON из источника, отличного от переменной PHP, было бы разумно сначала «обрезать» его:
источник
это поможет вам понять, какой тип ошибки
источник
Просто сэкономьте один раз. Я потратил 3 часа, чтобы выяснить, что это просто проблема с кодировкой html. Попробуй это
источник
Как заявил Юрген Мат, использование метода preg_replace, указанного пользователем2254008, также исправило его для меня.
Это не ограничивается Chrome, это, похоже, проблема преобразования набора символов (по крайней мере, в моем случае Unicode -> UTF8). Это устранило все проблемы, которые у меня были.
В качестве будущего узла объект JSON, который я декодировал, был получен из функции Python json.dumps. Это, в свою очередь, привело к появлению некоторых других антисанитарных данных, хотя с ними легко было справиться.
источник
Если вы получаете json из базы данных, поместите
после определения ссылки соединения $ con
источник
Здесь вы можете найти небольшую оболочку JSON с корректирующими действиями, которые решают проблему спецификации и не-ASCI: https://stackoverflow.com/a/43694325/2254935
источник
В моем случае это из-за одинарной кавычки в строке JSON.
Формат JSON допускает только двойные кавычки для ключей и строковых значений.
Пример:
Я запутался из-за синтаксиса Javascript. В Javascript, конечно, можно сделать так:
но позже при преобразовании этих объектов в строку JSON:
источник
Я решил эту проблему, распечатав JSON, а затем проверив источник страницы (CTRL / CMD + U):
Оказалось, что это был конечный
<pre>
тег.источник
вы должны убедиться в этих точках
1. ваша строка json не содержит неизвестных символов
2. Строку json можно просматривать из онлайн-просмотра json (вы можете искать в Google как онлайн-просмотрщик или парсер для json), она должна просматриваться без каких-либо ошибок
3. ваша строка не имеет HTML-сущностей, она должна быть простым текстом / строкой
для объяснения пункта 3
to (удалить функцию htmlentities ())
источник
Мне пришлось отключить error_reporting , чтобы json_decode () работал правильно. Звучит странно, но в моем случае это правда. Потому что между строкой JSON, которую я пытаюсь декодировать, напечатано какое-то примечание.
источник
Самое важное, что нужно помнить, когда вы получаете результат NULL из данных JSON, который является допустимым, - это использовать следующую команду:
Т.е.
Затем вы исправляете это с помощью:
источник
Итак, у меня сработала html_entity_decode (). Пожалуйста, попробуйте это.
источник
источник