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.