Saat menggunakan SQLite, kita dapat menggunakan metode berikut untuk mengekstrak data dari dokumen JSON.
json_extract()
Fungsi
Seperti namanya, json_extract()
fungsi mengekstrak dan mengembalikan satu atau beberapa nilai dari JSON yang terbentuk dengan baik.
Contoh:
SELECT json_extract('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'$.dogs[1]'
);
Hasil:
{"name":"Bark","scores":[3,4,8,7]}
Array berbasis nol, sehingga penghitungan dimulai dari 0
. Oleh karena itu, kami menetapkan [1]
untuk mendapatkan elemen kedua dalam dogs
array, yang kebetulan merupakan objek JSON.
Kita dapat mengembalikan nama anjing saja pada posisi itu dalam larik dengan menambahkan ke jalur kita:
SELECT json_extract('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'$.dogs[1].name'
);
Hasil:
Bark
Kita dapat menggunakan json_extract()
untuk mengembalikan beberapa jalur:
SELECT json_extract('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'$.dogs[0].name',
'$.dogs[1].name',
'$.dogs[2].name'
);
Hasil:
["Wag","Bark","Woof"]
Saat kami mengekstrak nilai dari beberapa jalur, nilai dikembalikan dalam array.
->
Operator
->
operator mengekstrak subkomponen dari dokumen JSON dan mengembalikan representasi JSON dari subkomponen tersebut.
Oleh karena itu, kita dapat mengubah contoh pertama menjadi ini:
SELECT '{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}' -> '$.dogs[1]';
Hasil:
{"name":"Bark","scores":[3,4,8,7]}
->
operator agak berbeda dengan json_extract()
fungsi:
->
operator selalu mengembalikan representasi JSON dari subkomponen.json_extract()
fungsi hanya mengembalikan JSON jika ada dua atau lebih argumen jalur (karena hasilnya adalah larik JSON) atau jika argumen jalur tunggal mereferensikan larik atau objek.- Jika hanya ada satu argumen jalur dan jalur tersebut mereferensikan null JSON atau string atau nilai numerik, maka
json_extract()
mengembalikan nilai SQL NULL, TEXT, INTEGER, atau REAL yang sesuai.
Oleh karena itu, inilah yang terjadi ketika kami mengekstrak nama anjing dari JSON kami:
SELECT '{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}' -> '$.dogs[1].name';
Hasil:
"Bark"
Kali ini dikelilingi oleh kutipan. Itu karena ia mengembalikan representasi nilai JSON. Ketika kami mengekstrak nilai yang sama dengan json_extract()
sebelumnya, kami mendapatkan representasi SQL dari nilai tersebut.
Namun, kita juga dapat menggunakan ->>
operator untuk mengembalikan representasi SQL.
->>
Operator
->>
operator bekerja dengan cara yang sama seperti ->
operator, kecuali ->>
mengembalikan representasi SQL dari subkomponen yang ditentukan. Secara khusus, ini mengembalikan SQL TEXT
, INTEGER
, REAL
, atau NULL
nilai yang mewakili subkomponen yang dipilih, atau NULL
jika subkomponen tidak ada.
Oleh karena itu, inilah yang terjadi ketika kita menggunakan ->>
operator untuk mengekstrak nama anjing:
SELECT '{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}' ->> '$.dogs[1].name';
Hasil:
Bark
Tidak lagi diapit tanda kutip.