Mam ten obiekt JSON przechowywany w zwykłym pliku tekstowym:
{
"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"
}
}
Kiedy próbuję go zdekodować json_decode()
, zwraca NULL. Czemu? Plik jest czytelny (próbowałem powtórzyć file_get_contents()
i zadziałało dobrze).
Przetestowałem JSON na http://jsonlint.com/ i jest całkowicie poprawny.
Co tu jest nie tak?
Rozwiązanie
Szukając odpowiedzi w Google, wróciłem do SO: json_decode zwraca NULL po wywołaniu usługi sieciowej . Mój plik JSON miał sekwencję UTF BOM (kilka znaków binarnych, których nie powinno tam być), co zrywa strukturę JSON. Poszedłem do Hex Editor, skasowałem bajty. Wszystko wróciło do normy. Dlaczego tak się stało? Ponieważ edytowałem plik za pomocą Notatnika Microsoft Windows. Okropny pomysł!
json_last_error()
.