SQLite json_object()
function mengembalikan objek JSON yang terbentuk dengan baik berdasarkan argumennya.
Fungsi menerima nol atau lebih pasangan argumen dan mengembalikan objek JSON yang terbentuk dengan baik berdasarkan argumen tersebut.
Sintaks
json_object(label1,value1,...)
Dimana label1, value2, ...
mewakili pasangan label/nilai.
Contoh
Berikut adalah contoh sederhana untuk ditunjukkan:
SELECT json_object( "name", "Igor", "age", 35 );
Hasil:
{"name":"Igor","age":35}
Meneruskan Objek JSON
Melewati argumen dengan tipe SQL TEXT menghasilkan string JSON yang dikutip, dengan label yang dikutip akan diloloskan:
SELECT json_object( "user", '{ "name" : "igor", "age" : 35 }' );
Hasil:
{"user":"{ \"name\" : \"igor\", \"age\" : 35 }"}
Jika kita tidak ingin hal ini terjadi, kita dapat menggunakan json()
berfungsi untuk memberikan nilai sebagai dokumen JSON yang valid:
SELECT json_object( "user", json('{ "name" : "igor", "age" : 35 }') );
Hasil:
{"user":{"name":"igor","age":35}}
Cara lain untuk melakukannya adalah dengan menggunakan ->
SQL SQLite operator:
SELECT json_object( "user", '{ "name" : "igor", "age" : 35 }' -> '$' );
Hasil:
{"user":{"name":"igor","age":35}}
Atau, kita dapat menggunakan json_object()
lain fungsi:
SELECT json_object( "user", json_object( "name", "Igor", "age", 35 ) );
Hasil:
{"user":{"name":"Igor","age":35}}
Ini dia dengan beberapa nilai lainnya:
SELECT json_object(
"a", 1,
"user", json_object( "name", "Igor", "age", 35 ),
"b", 2
);
Hasil:
{"a":1,"user":{"name":"Igor","age":35},"b":2}
Meneruskan Array JSON
Hal serupa terjadi saat meneruskan array JSON:
SELECT json_object( "scores", '[ 9, 4, 7 ]' );
Hasil:
{"scores":"[ 9, 4, 7 ]"}
Dalam hal ini, nilainya adalah string yang menyerupai array.
Untuk mengembalikan array JSON yang sebenarnya, kita dapat meneruskan argumen kita ke json()
fungsi:
SELECT json_object( "scores", json('[ 9, 4, 7 ]') );
Hasil:
{"scores":[9,4,7]}
Kita juga bisa menggunakan ->
operator:
SELECT json_object( "scores", '[ 9, 4, 7 ]' -> '$' );
Hasil:
{"scores":[9,4,7]}
Atau, kita dapat meneruskan nilai ke json_array()
fungsi:
SELECT json_object( "scores", json_array( 9, 4, 7 ) );
Hasil:
{"scores":[9,4,7]}
Ini dia dengan beberapa pasangan nama/nilai lainnya:
SELECT json_object(
"name", "Bruno",
"scores", json_array( 9, 4, 7 ),
"age", 25
);
Hasil:
{"name":"Bruno","scores":[9,4,7],"age":25}
Buat Objek Kosong
Memanggil json_object()
tanpa melewatkan argumen apa pun menghasilkan objek kosong:
SELECT json_object();
Hasil:
{}
Label Duplikat
Pada saat penulisan, json_object()
menerima label duplikat tanpa masalah. Oleh karena itu, kita dapat melakukan hal-hal seperti ini:
SELECT json_object( "b", 1, "b", 2 );
Hasil:
{"b":1,"b":2}
Tetapi dokumentasi SQLite menyarankan bahwa ini mungkin tidak selalu terjadi – versi SQLite yang akan datang mungkin tidak mendukung skenario seperti itu.
Contoh Basis Data
Kita dapat menggunakan json_object()
saat mengambil data dari database.
Misalkan kita menjalankan kueri berikut:
SELECT * FROM Pets;
Hasil:
+-------+---------+--------+ | PetId | PetName | TypeId | +-------+---------+--------+ | 1 | Homer | 3 | | 2 | Yelp | 1 | | 3 | Fluff | 2 | | 4 | Brush | 4 | +-------+---------+--------+
Kita bisa melihat ada tiga kolom, dan kita bisa melihat namanya.
Kita dapat menggunakan json_object()
fungsi pada tabel itu seperti ini:
SELECT json_object(
'PetId', PetId,
'PetName', PetName,
'TypeId', TypeId
)
FROM Pets;
Hasil:
{"PetId":1,"PetName":"Homer","TypeId":3} {"PetId":2,"PetName":"Yelp","TypeId":1} {"PetId":3,"PetName":"Fluff","TypeId":2} {"PetId":4,"PetName":"Brush","TypeId":4}
Di sini, saya secara eksplisit menentukan nama label, lalu menggunakan kolom aktual dari database untuk nilainya. Setiap baris menjadi dokumen JSON, dan setiap kolom menjadi pasangan kunci/nilai dalam dokumen JSON tersebut.
Kita juga dapat menggunakan json_group_array()
fungsi untuk membungkus dokumen dalam array:
SELECT json_group_array(
json_object(
'PetId', PetId,
'PetName', PetName,
'TypeId', TypeId
)
)
FROM Pets;
Hasil:
[{"PetId":1,"PetName":"Homer","TypeId":3},{"PetId":2,"PetName":"Yelp","TypeId":1},{"PetId":3,"PetName":"Fluff","TypeId":2},{"PetId":4,"PetName":"Brush","TypeId":4}]