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()
.
$data = json_decode($json);
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
.
$json = '
{
"type": "donut",
"name": "Cake"
}';
$yummy = json_decode($json);
echo $yummy->type; //donut
Mengakses elemen array
Anda mengakses elemen-elemen dari salah satu array ini dengan cara yang sama Anda lakukan untuk array lain, misalnya $array[0]
.
$json = '
[
"Glazed",
"Chocolate with Sprinkles",
"Maple"
]';
$toppings = json_decode($json);
echo $toppings[1]; //Chocolate with Sprinkles
Iterate dengan itu foreach
.
foreach ($toppings as $topping) {
echo $topping, "\n";
}
Cokelat Glazed dengan Taburan
Maple
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
.
$json = '
{
"type": "donut",
"name": "Cake",
"toppings": [
{ "id": "5002", "type": "Glazed" },
{ "id": "5006", "type": "Chocolate with Sprinkles" },
{ "id": "5004", "type": "Maple" }
]
}';
$yummy = json_decode($json);
echo $yummy->toppings[2]->id; //5004
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']
.
$json = '
{
"type": "donut",
"name": "Cake",
"toppings": [
{ "id": "5002", "type": "Glazed" },
{ "id": "5006", "type": "Chocolate with Sprinkles" },
{ "id": "5004", "type": "Maple" }
]
}';
$yummy = json_decode($json, true);
echo $yummy['toppings'][2]['type']; //Maple
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, misalnya
$json = '
{
"foo": "foo value",
"bar": "bar value",
"baz": "baz value"
}';
$assoc = json_decode($json, true);
foreach ($assoc as $key => $value) {
echo "The value of key '$key' is '$value'", PHP_EOL;
}
Cetakan
Nilai kunci 'foo' adalah 'nilai foo'
Nilai kunci 'bar' adalah 'nilai bar'
Nilai kunci 'baz' adalah 'nilai baz'
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()
:
$json = '
{
"type": "donut",
"name": "Cake",
"toppings": [
{ "id": "5002", "type": "Glazed" },
{ "id": "5006", "type": "Chocolate with Sprinkles" },
{ "id": "5004", "type": "Maple" }
]
}';
$yummy = json_decode($json);
print_r($yummy);
dan periksa hasilnya:
stdClass Object
(
[type] => donut
[name] => Cake
[toppings] => Array
(
[0] => stdClass Object
(
[id] => 5002
[type] => Glazed
)
[1] => stdClass Object
(
[id] => 5006
[type] => Chocolate with Sprinkles
)
[2] => stdClass Object
(
[id] => 5004
[type] => Maple
)
)
)
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()
:
print_r($yummy->toppings[0]);
stdClass Object
(
[id] => 5002
[type] => Glazed
)
Lihatlah di penjelajah JSON interaktif yang praktis ini .
Pecahkan masalah menjadi beberapa bagian yang lebih mudah untuk dililitkan.
json_decode()
kembali null
Ini terjadi karena:
- JSON seluruhnya terdiri dari hanya itu
null
,.
- JSON tidak valid - periksa hasil
json_last_error_msg
atau masukkan melalui sesuatu seperti JSONLint .
- Ini berisi elemen bersarang lebih dari 512 level. Kedalaman maks standar ini dapat diganti dengan melewatkan bilangan bulat sebagai argumen ketiga
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.
$json = '{"@attributes":{"answer":42}}';
$thing = json_decode($json);
echo $thing->{'@attributes'}->answer; //42
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.
$json = '
{
"type": "donut",
"name": "Cake",
"toppings": "[{ \"type\": \"Glazed\" }, { \"type\": \"Maple\" }]"
}';
$yummy = json_decode($json);
$toppings = json_decode($yummy->toppings);
echo $toppings[0]->type; //Glazed
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 .