Saya memiliki objek JSON ini yang disimpan pada file teks biasa:
{
"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"
}
}
Ketika saya mencoba untuk memecahkan kode dengan json_decode()
, itu mengembalikan NULL. Mengapa? File tersebut dapat dibaca (saya mencoba menggemakan file_get_contents()
dan berfungsi dengan baik).
Saya telah menguji JSON terhadap http://jsonlint.com/ dan itu sangat valid.
Ada apa disini?
Larutan
Mencari jawaban di Google, saya kembali ke SO: json_decode mengembalikan NULL setelah panggilan layanan web . File JSON saya memiliki urutan UTF BOM (beberapa karakter biner yang seharusnya tidak ada), dengan demikian, merusak struktur JSON. Pergi ke Hex Editor, menghapus byte. Semuanya kembali normal. Mengapa ini terjadi? Karena saya mengedit file menggunakan Notepad Microsoft Windows. Ide yang buruk!
json_last_error()
.Jawaban:
Bisa jadi pengkodean karakter khusus. Anda bisa meminta json_last_error () untuk mendapatkan informasi yang pasti.
sumber
json_last_error()
karena itu PHP 5.2.9. Fungsi itu muncul di PHP 5.3.0.utf8_decode()
terlebih dahulu, kemudianjson_decode()
gagal secara diam-diam.Ini berhasil untuk saya
sumber
Anda bisa mencobanya.
sumber
stripslashes()
dua kali, yang menghapus garis miring penting dan menyebabkan string JSON tidak valid. Jawaban ini membantu saya menemukan kesalahannyaJika Anda memeriksa permintaan di chrome Anda akan melihat bahwa JSON adalah teks, jadi ada kode kosong yang ditambahkan ke JSON.
Anda dapat menghapusnya dengan menggunakan
$k=preg_replace('/\s+/', '',$k);
Kemudian Anda dapat menggunakan:
json_decode($k)
print_r
kemudian akan menampilkan array.sumber
$k=preg_replace('/\s+/', ' ',$k);
Saya memiliki masalah yang sama dan saya menyelesaikannya hanya dengan mengganti karakter kutipan sebelum decode.
Nilai JSON saya dihasilkan oleh fungsi JSON.stringify.
sumber
Mungkin beberapa karakter tersembunyi mengotak-atik json Anda, coba ini:
sumber
melakukannya untuk saya. Dan ya, menguji di Chrome. Terima kasih kepada pengguna2254008
sumber
Hanya berpikir saya akan menambahkan ini, karena saya mengalami masalah ini hari ini. Jika ada padding string yang mengelilingi string JSON Anda, json_decode akan mengembalikan NULL.
Jika Anda menarik JSON dari sumber selain variabel PHP, sebaiknya Anda "memangkas" terlebih dahulu:
sumber
ini membantu Anda memahami apa jenis kesalahan
sumber
Hemat satu kali saja. Saya menghabiskan 3 jam untuk mengetahui bahwa itu hanya masalah encoding html. Coba ini
sumber
Seperti yang dinyatakan oleh Jürgen Math menggunakan metode preg_replace yang terdaftar oleh user2254008 memperbaikinya untuk saya juga.
Ini tidak terbatas pada Chrome, tampaknya menjadi masalah konversi kumpulan karakter (setidaknya dalam kasus saya, Unicode -> UTF8) Ini memperbaiki semua masalah yang saya alami.
Sebagai node masa depan, Objek JSON yang saya dekode berasal dari fungsi json.dumps Python. Hal ini pada gilirannya menyebabkan beberapa data tidak sehat lainnya disebarluaskan meskipun mudah ditangani.
sumber
Jika Anda mendapatkan json dari database, letakkan
setelah menentukan tautan koneksi $ con
sumber
Di sini Anda dapat menemukan pembungkus JSON kecil dengan tindakan korektif yang membahas masalah BOM dan non-ASCI: https://stackoverflow.com/a/43694325/2254935
sumber
Untuk kasus saya, ini karena kutipan tunggal dalam string JSON.
Format JSON hanya menerima tanda kutip ganda untuk kunci dan nilai string.
Contoh:
Saya bingung karena sintaks Javascript. Di Javascript, tentunya kita bisa melakukan seperti ini:
tapi nanti saat mengonversi objek tersebut ke string JSON:
sumber
Saya telah memecahkan masalah ini dengan mencetak JSON, lalu memeriksa sumber halaman (CTRL / CMD + U):
Ternyata ada
<pre>
tag tertinggal .sumber
Anda harus memastikan poin-poin ini
1. string json Anda tidak memiliki karakter yang tidak diketahui
2. string json dapat dilihat dari penampil json online (Anda dapat mencari di google sebagai penampil online atau pengurai untuk json) seharusnya ditampilkan tanpa kesalahan
3. string Anda tidak memiliki entitas html itu harus teks / string biasa
untuk penjelasan poin 3
ke (menghapus fungsi htmlentities ())
sumber
Bagi saya, saya harus mematikan error_reporting , agar json_decode () berfungsi dengan benar. Kedengarannya aneh, tapi benar dalam kasus saya. Karena ada beberapa pemberitahuan yang dicetak di antara string JSON yang saya coba pecahkan kodenya.
sumber
Hal terpenting untuk diingat, ketika Anda mendapatkan hasil NULL dari data JSON yang valid adalah dengan menggunakan perintah berikut:
Yaitu.
Anda kemudian memperbaikinya dengan:
sumber
Jadi, html_entity_decode () berhasil untuk saya. Silakan coba ini.
sumber
sumber