Dalam SQLite, json()
fungsi mengubah teks mentah yang terlihat seperti JSON menjadi JSON yang sebenarnya.
Kami meneruskan string JSON sebagai argumen saat kami memanggil fungsi. json()
function kemudian memeriksa apakah argumen tersebut adalah string JSON yang valid dan mengembalikan versi yang diperkecil dari string JSON tersebut. Jika argumennya bukan string JSON yang terbentuk dengan baik, maka akan terjadi kesalahan.
Namun, json()
fungsi tidak dirancang untuk menguji apakah suatu nilai adalah JSON yang valid atau tidak. Untuk melakukannya, gunakan json_valid()
berfungsi sebagai gantinya.
Sintaks
json(X)
Dimana X
adalah nilai yang akan diperiksa dan diperkecil.
Contoh
SELECT json('{ "a": 1 }');
Hasil:
{"a":1}
Dalam hal ini, saya memberikan dokumen JSON yang valid, sehingga versi yang diperkecil dikembalikan (spasi yang tidak perlu dihapus).
Berikut adalah contoh yang menggunakan dokumen JSON yang lebih besar dengan lebih banyak ruang:
SELECT json('{
"_id": 1.0,
"title": "Animals",
"body": "blah blah 1",
"tags": [
"cats",
"dogs"
]
}');
Hasil:
{"_id":1.0,"title":"Animals","body":"blah blah 1","tags":["cats","dogs"]}
json()
function dapat berguna ketika Anda perlu meneruskan JSON ke fungsi lain. Seperti yang disebutkan itu mengubah teks mentah yang terlihat seperti JSON menjadi JSON yang sebenarnya, yang membuatnya ideal ketika Anda perlu meneruskannya ke fungsi lain. Fungsi lainnya kemudian akan menafsirkan nilai sebagai JSON, bukan string.
JSON tidak valid
Melewati string JSON yang tidak valid menghasilkan kesalahan:
SELECT json('{oops!');
Hasil:
Runtime error: malformed JSON
Label Duplikat
Jika dokumen JSON berisi label duplikat, tidak ada jaminan bahwa label tersebut akan selalu dipertahankan.
Pada saat penulisan, label duplikat dipertahankan. Namun, dokumentasi SQLite menyarankan bahwa ini dapat berubah di versi SQLite yang akan datang, sehingga label duplikat akan dihapus secara diam-diam.
Berikut adalah contoh yang menggunakan dokumen JSON dengan label duplikat:
SELECT json('{ "a": 1, "b": 1, "a" : 2 }');
Hasil:
{"a":1,"b":1,"a":2}
Dalam hal ini, dokumen JSON saya memiliki dua label yang disebut a
. Keduanya dipertahankan dalam instalasi SQLite saya (versi 3.38.0), tetapi ini mungkin tidak selalu terjadi di versi SQLite mendatang.