Ini dimaksudkan sebagai pertanyaan dan jawaban referensi umum yang mencakup banyak pertanyaan "Bagaimana cara mengakses data di JSON saya?" pertanyaan. Di sinilah untuk menangani dasar-dasar luas mendekode JSON dalam PHP dan mengakses hasilnya.
Saya punya JSON:
{
"type": "donut",
"name": "Cake",
"toppings": [
{ "id": "5002", "type": "Glazed" },
{ "id": "5006", "type": "Chocolate with Sprinkles" },
{ "id": "5004", "type": "Maple" }
]
}
Bagaimana cara memecahkan kode ini dalam PHP dan mengakses data yang dihasilkan?
Jawaban:
Intro
Pertama, Anda memiliki string. JSON bukan array, objek, atau struktur data. JSON adalah format serialisasi berbasis teks - jadi string yang mewah, tetapi masih hanya string. Dekode dalam PHP dengan menggunakan
json_decode()
.Di sana Anda mungkin menemukan:
Ini adalah hal-hal yang dapat dikodekan dalam JSON. Atau lebih tepatnya, ini adalah versi PHP dari hal-hal yang dapat dikodekan dalam JSON.
Tidak ada yang spesial dari mereka. Mereka bukan "objek JSON" atau "array JSON." Anda telah mendekodekan JSON - Anda sekarang memiliki tipe PHP harian dasar .
Objek akan menjadi instance dari stdClass , kelas bawaan yang hanya merupakan hal umum yang tidak penting di sini.
Mengakses properti objek
Anda mengakses properti dari salah satu objek ini dengan cara yang sama seperti yang Anda lakukan untuk properti non-statis publik dari objek lain, misalnya
$object->property
.Mengakses elemen array
Anda mengakses elemen-elemen dari salah satu array ini dengan cara yang sama Anda lakukan untuk array lain, misalnya
$array[0]
.Iterate dengan itu
foreach
.Atau mengacaukan dengan salah satu dari fungsi bazillion built-in array .
Mengakses item yang bersarang
Properti objek dan elemen array mungkin lebih banyak objek dan / atau array - Anda dapat terus mengakses properti dan anggotanya seperti biasa, misalnya
$object->array[0]->etc
.Berlalu
true
sebagai argumen kedua ke json_decode ()Ketika Anda melakukan ini, alih-alih objek Anda akan mendapatkan array asosiatif - array dengan string untuk kunci. Sekali lagi Anda mengakses elemen-elemennya seperti biasa, mis
$array['key']
.Mengakses item array asosiatif
Saat mendekode objek JSON ke array PHP asosiatif, Anda dapat mengulangi kedua kunci dan nilai menggunakan
foreach (array_expression as $key => $value)
sintaks, misalnyaCetakan
Tidak tahu bagaimana data disusun
Baca dokumentasi untuk apa pun yang Anda dapatkan dari JSON.
Lihatlah JSON - di mana Anda melihat kurung keriting
{}
mengharapkan objek, di mana Anda melihat kurung siku[]
mengharapkan array.Memukul data yang diterjemahkan dengan
print_r()
:dan periksa hasilnya:
Ini akan memberi tahu Anda di mana Anda memiliki objek, di mana Anda memiliki array, bersama dengan nama dan nilai anggota mereka.
Jika Anda hanya bisa mendapatkan begitu jauh ke dalamnya sebelum Anda tersesat - pergi yang jauh dan hit yang dengan
print_r()
:Lihatlah di penjelajah JSON interaktif yang praktis ini .
Pecahkan masalah menjadi beberapa bagian yang lebih mudah untuk dililitkan.
json_decode()
kembalinull
Ini terjadi karena:
null
,.json_last_error_msg
atau masukkan melalui sesuatu seperti JSONLint .json_decode()
.Jika Anda perlu mengubah kedalaman maks Anda mungkin memecahkan masalah yang salah. Cari tahu mengapa Anda mendapatkan data yang sangat bersarang (mis. Layanan yang Anda tanyakan yang menghasilkan JSON memiliki bug) dan jangan sampai hal itu terjadi.
Nama properti objek berisi karakter khusus
Terkadang Anda akan memiliki nama properti objek yang berisi sesuatu seperti tanda hubung
-
atau tanda@
yang tidak dapat digunakan dalam pengidentifikasi literal. Sebagai gantinya Anda dapat menggunakan string literal dalam kurung kurawal untuk mengatasinya.Jika Anda memiliki integer sebagai properti, lihat: Bagaimana cara mengakses properti objek dengan nama seperti integer? sebagai referensi.
Seseorang memasukkan JSON ke JSON Anda
Ini konyol tapi itu terjadi - ada JSON yang disandikan sebagai string di dalam JSON Anda. Decode, akses string seperti biasa, decode itu , dan akhirnya dapatkan apa yang Anda butuhkan.
Data tidak muat di memori
Jika JSON Anda terlalu besar untuk
json_decode()
ditangani sekaligus, semuanya menjadi rumit. Lihat:Cara mengatasinya
Lihat: Referensi: semua cara dasar untuk mengurutkan array dan data dalam PHP .
sumber
Anda dapat menggunakan json_decode () untuk mengubah string json menjadi objek / array PHP.
Misalnya.
Memasukkan:
Keluaran:
Beberapa Poin yang perlu diingat:
json_decode
membutuhkan string untuk menjadi validjson
kalau tidak akan kembaliNULL
.json_last_error()
dapat digunakan untuk menentukan sifat kesalahan yang tepat.utf8
konten, ataujson_decode
mungkin kesalahan keluar dan hanya mengembalikanNULL
nilai.sumber
sumber
Kita dapat mendekode string json ke dalam array menggunakan fungsi json_decode di php
1) json_decode ($ json_string) // ia mengembalikan objek
2) json_decode ($ json_string, true) // ia mengembalikan array
sumber
Pertimbangkan untuk menggunakan
JSONPath
https://packagist.org/packages/flow/jsonpathAda penjelasan yang cukup jelas tentang cara menggunakannya dan mengurai file JSON menghindari semua loop yang diusulkan. Jika Anda sudah familiar dengan
XPath
untukXML
Anda akan mulai mencintai pendekatan ini.sumber
Saya telah menulis paket bernama
JSON
( GitHub , Packagist ). Jika Anda ingin mencegah overhead menggunakanjson_*
fungsi, Anda harus mencobanya.Contoh
Lihat wiki , atau tutorial cepat untuk membiasakan diri dengannya.
Lebih jauh, jika Anda ingin membaca file JSON dan mengekstrak datanya (sepertinya Anda mencoba melakukan ini), lihat paket JSONFile , yang telah saya tulis juga.
sumber
https://paiza.io/projects/X1QjjBkA8mDo6oVh-J_63w
Periksa kode di bawah ini untuk mengubah json menjadi array
PHP
, Jika JSON benar makajson_decode()
berfungsi dengan baik, dan akan mengembalikan array, Tetapi jika JSON salah format, maka akan mengembalikanNULL
,Jika JSON salah, dan Anda hanya mengharapkan array, maka Anda dapat menggunakan fungsi ini,
Jika JSON salah, dan Anda ingin menghentikan eksekusi kode, maka Anda dapat menggunakan fungsi ini,
Anda dapat menggunakan fungsi apa pun tergantung pada kebutuhan Anda,
sumber