Bir düz metin dosyasında depolanan bu JSON nesnesine sahibim:
{
"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"
}
}
Kodunu çözmeye çalıştığımda json_decode()
NULL döndürüyor. Neden? Dosya okunabilir (yankılamayı denedim file_get_contents()
ve iyi çalıştı).
JSON'u http://jsonlint.com/ ile test ettim ve tamamen geçerli.
Burada sorun ne?
Çözüm
Google'da cevaplar arıyorum, SO'ya geri döndüm: json_decode webservice çağrısından sonra NULL döndürüyor . JSON dosyam UTF BOM dizisine sahipti (orada olmaması gereken bazı ikili karakterler), bu nedenle JSON yapısını bozdu. Hex Editor'a gittim, baytları sildi. Her şey normale döndü. Bu neden oldu? Çünkü dosyayı Microsoft Windows'un Not Defteri'ni kullanarak düzenledim. Korkunç fikir!
json_last_error()
.