Tôi có đối tượng JSON này được lưu trữ trên một tệp văn bản thuần túy:
{
"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"
}
}
Khi tôi cố gắng giải mã nó bằng json_decode()
, nó trả về NULL. Tại sao? Tệp có thể đọc được (tôi đã thử echo file_get_contents()
và nó hoạt động tốt).
Tôi đã thử nghiệm JSON chống lại http://jsonlint.com/ và nó hoàn toàn hợp lệ.
Có gì sai ở đây?
Giải pháp
Đang tìm kiếm câu trả lời trên Google, tôi quay lại SO: json_decode trả về NULL sau cuộc gọi webservice . Tệp JSON của tôi có chuỗi UTF BOM (một số ký tự nhị phân không nên có), do đó, phá vỡ cấu trúc JSON. Đã đến Hex Editor, đã xóa các byte. Mọi thứ trở lại bình thường. Tại sao điều này đã xảy ra? Bởi vì tôi đã chỉnh sửa tệp bằng Microsoft Windows 'Notepad. Ý tưởng kinh khủng!
json_last_error()
.