Ho questo oggetto JSON memorizzato su un file di testo:PHP json_decode() restituisce NULL con JSON valido?
{
"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"
}
}
Quando provo a decodificarlo con json_decode()
, restituisce NULL. Perché? Il file è leggibile (ho provato echoing file_get_contents()
e ha funzionato bene).
Ho provato JSON contro http://jsonlint.com/ ed è perfettamente valido.
Cosa c'è che non va qui?
Soluzione
Alla ricerca di risposte su Google, sono tornato a SO: json_decode returns NULL after webservice call. Il mio file JSON aveva la sequenza BOM UTF (alcuni caratteri binari che non dovrebbero essere lì), rompendo così la struttura JSON. Andato a Hex Editor, cancellato i byte. Tutto è tornato alla normalità. Perché è successo? Perché ho modificato il file utilizzando il Blocco note di Microsoft Windows. Idea terribile!
Utilizzo di PHP 5.2.9; quindi, non posso usare 'json_last_error()'. –
Nota anche che ciò può accadere con altri caratteri non validi nel mezzo del file. Ho appena avuto json_decode() restituendo null perché la stringa conteneva uno di quei trattini speciali, probabilmente incollati da MS Word, e quindi forse mis-encoded. Per identificare potenziali caratteri problema, apri il file JSON (che ho usato in Notepad ++), cambia la codifica (senza conversione) e salva come copia. Quindi diff i due file (ho usato WinMerge). – LinusR
(problema Blocco note di Windows) Si prega di consultare questo, ho condiviso il problema e lo ha risolto: http://stackoverflow.com/questions/10290849/how-to-remove-multiple-utf-8-bom-sequences-before -doctype –