Topik ini menjelaskan sintaksis fungsi JSON dan menyediakan contoh penggunaannya.
Simple Log Service mendukung fungsi JSON berikut:
Dalam pernyataan kueri Layanan Log Sederhana, string harus diapit dengan tanda kutip tunggal (''). Karakter yang tidak diapit tanda kutip tunggal atau diapit tanda kutip ganda ("") akan diperlakukan sebagai nama bidang atau kolom. Sebagai contoh,
'status'merepresentasikan string 'status', sedangkanstatusatau"status"merepresentasikan bidang log bernama 'status'.Jika nilai suatu bidang log berada dalam format JSON dan Anda perlu memperluasnya menjadi beberapa baris, gunakan sintaks UNNEST. Untuk informasi lebih lanjut, lihat Klausa UNNEST.
Jika string tidak dapat diurai sebagai JSON, fungsi akan mengembalikan nilai null.
Jika log JSON terpotong selama pengumpulan, menggunakan fungsi JSON padanya akan menyebabkan kesalahan dan menghentikan kueri. Untuk menangani kesalahan ini, Anda dapat menggunakan ekspresi TRY untuk menangkap pengecualian, sehingga kueri dapat dilanjutkan. Contohnya adalah
* | select message, try(json_parse(message)). Untuk informasi lebih lanjut, lihat Ekspresi TRY.
Nama Fungsi | Sintaks | Deskripsi | Dukungan SQL | Dukungan SPL |
json_array_contains(x, nilai) | Memeriksa apakah array JSON berisi nilai tertentu. | √ | √ | |
json_array_get(x, indeks) | Mengembalikan elemen pada indeks tertentu dalam array JSON. | √ | × | |
json_array_length(x) | Menghitung jumlah elemen dalam array JSON. | √ | √ | |
json_extract(x, json_path) | Mengekstrak sekumpulan nilai JSON, yang bisa berupa array atau objek, dari objek JSON atau array JSON. | √ | √ | |
json_extract_scalar(x, json_path) | Mengekstrak sekumpulan nilai skalar, seperti string, integer, atau Boolean, dari objek JSON atau array JSON. Fungsi ini mirip dengan fungsi json_extract. | √ | √ | |
json_extract_bool(x, json_path) | Mengekstrak nilai Boolean dari objek JSON atau array JSON. | √ | × | |
json_extract_long(x, json_path) | Mengekstrak nilai bigint dari objek JSON atau array JSON. | √ | × | |
json_extract_double(x, json_path) | Mengekstrak nilai double dari objek JSON atau array JSON. | √ | × | |
json_format(x) | Mengonversi objek JSON menjadi string. | √ | √ | |
json_parse(x) | Mengonversi string menjadi objek JSON. | √ | √ | |
json_size(x, json_path) | Menghitung jumlah elemen dalam objek JSON atau array. | √ | √ | |
json_object_flatten(x) | Meratakan objek JSON menjadi struktur kunci-nilai satu lapis. | √ | × |
Fungsi json_array_contains
Fungsi json_array_contains memeriksa apakah array JSON berisi nilai tertentu.
Sintaksis
json_array_contains(x, value)Parameter
Parameter | Deskripsi |
x | Nilai parameter adalah array JSON. |
value | Sebuah nilai numerik. |
Tipe nilai kembali
boolean
Contoh
Contoh ini memeriksa apakah array JSON [1, 2, 3] berisi nilai 2.
Pernyataan kueri (Uji)
* | SELECT json_array_contains('[1, 2, 3]', 2)Hasil kueri

Fungsi json_array_get
Fungsi json_array_get mengembalikan elemen pada indeks tertentu dalam array JSON.
Sintaksis
json_array_get(x, indeks)Parameter
Parameter | Deskripsi |
x | Nilai parameter adalah array JSON. |
index | Indeks elemen JSON. Indeks dimulai dari 0. |
Tipe nilai kembali
varchar
Contoh
Contoh ini mengembalikan elemen pada indeks 1 dari array JSON ["a", [3, 9], "c"].
Pernyataan kueri (Tes)
* | SELECT json_array_get('["a", [3, 9], "c"]', 1)Hasil kueri

Fungsi json_array_length
Fungsi json_array_length menghitung jumlah elemen dalam array JSON.
Sintaksis
json_array_length(x)Parameter
Parameter | Deskripsi |
x | Nilai parameter adalah array JSON. |
Tipe nilai kembali
bigint
Contoh
Contoh 1: Menghitung jumlah elemen JSON di dalam bidang Results.
Bidang contoh
Results:[{"EndTime":1626314920},{"FireResult":2}]Pernyataan kueri
* | SELECT json_array_length(Results)Hasil kueri

Contoh 2: Menghitung jumlah elemen JSON di dalam bidang time.
Bidang contoh
time:["time_local","request_time","upstream_response_time"]Pernyataan kueri
* | SELECT json_array_length(time)Hasil kueri

Fungsi json_extract
Fungsi json_extract mengekstrak satu set nilai JSON, yang bisa berupa array atau objek, dari objek JSON atau array JSON.
Fungsi json_extract melaporkan kesalahan untuk tipe JSON yang tidak valid. Dalam kasus seperti itu, gunakan fungsi json_extract_scalar sebagai gantinya.
Sintaksis
json_extract(x, json_path)Parameter
Parameter | Deskripsi |
x | Nilai parameter adalah objek JSON atau array JSON. |
json_path | Path JSON, seperti $.store.book[0].title. Untuk informasi lebih lanjut, lihat Atur json_path. |
Tipe nilai kembali
String dalam format JSON.
Contoh
SQL
Contoh ini mengekstrak nilai dari bidang EndTime dari bidang Results.
Bidang contoh
Results:[{"EndTime":1626314920},{"FireResult":2}]Pernyataan kueri
* | SELECT json_extract(Results, '$.0.EndTime')Hasil kueri

SPL
Contoh ini mengekstrak nilai dari bidang EndTime dari bidang Results.
Bidang contoh
Results:[{"EndTime":1626314920},{"FireResult":2}]Pernyataan SPL
* | extend a = json_extract(Results, '$.0.EndTime')Hasil SPL

Fungsi json_extract_scalar
Fungsi json_extract_scalar mengekstrak nilai skalar, seperti string, integer, atau Boolean, dari objek JSON atau array JSON.
Sintaksis
json_extract_scalar(x, json_path)Parameter
Parameter | Deskripsi |
x | Nilai parameter adalah objek JSON atau array JSON. |
json_path | Path JSON, seperti $.store.book[0].title. Untuk informasi lebih lanjut, lihat Atur json_path. |
Tipe nilai kembali
varchar
Contoh
SQL
Contoh ini mengekstrak nilai dari bidang RawResultCount dari bidang Results dan mengonversi nilainya ke tipe bigint untuk menghitung jumlah.
Contoh bidang
Results:[{"EndTime":1626314920},{"RawResultCount":1}]Pernyataan query
* | SELECT sum(cast(json_extract_scalar(Results,'$.1.RawResultCount') AS bigint) )Hasil query

SPL
Contoh ini mengekstrak nilai dari bidang RawResultCount dari bidang Results.
Contoh bidang
Results:[{"EndTime":1626314920},{"RawResultCount":1}]Pernyataan SPL
* | extend a = json_extract_scalar(Results, '$.1.RawResultCount')Hasil SPL

Fungsi json_extract_bool
Fungsi json_extract_bool mengekstrak Nilai Boolean dari objek JSON atau array JSON. Jika nilai tidak dapat diekstrak, null akan dikembalikan.
Sintaksis
json_extract_bool(x, json_path)Parameter
Parameter | Deskripsi |
x | Nilai parameter ini bertipe JSON. |
json_path | Path JSON, seperti $.store.book[0].title. Untuk informasi lebih lanjut, lihat Atur json_path. |
Tipe nilai kembali
boolean
Contoh
Contoh ini mengekstrak Nilai Boolean dari array JSON Results.
Bidang contoh
Results:[{"ret":true},{"status":FALSE}]Pernyataan kueri
* | SELECT json_extract_bool(Results, '$.0.ret')Hasil kueri

Fungsi json_extract_long
Fungsi json_extract_long mengekstrak nilai bigint dari objek JSON atau array JSON. Jika nilai tidak dapat diekstrak, null akan dikembalikan.
Sintaksis
json_extract_long(x, json_path)Parameter
Parameter | Deskripsi |
x | Nilai parameter bertipe JSON. |
json_path | Path JSON, seperti $.store.book[0].title. Untuk informasi lebih lanjut, lihat Setel json_path. |
Tipe nilai kembali
bigint
Contoh
Contoh ini mengekstrak nilai bigint dari array JSON Results.
Bidang contoh
Results:[{"EndTime":1626314920},{"FireResult":2}]Pernyataan kueri
* | SELECT json_extract_long(Results, '$.0.EndTime')Hasil kueri

Fungsi json_extract_double
Fungsi json_extract_double mengekstrak nilai double dari objek JSON atau array JSON. Jika nilai tidak dapat diekstrak, null akan dikembalikan.
Sintaksis
json_extract_double(x, json_path)Parameter
Parameter | Deskripsi |
x | Nilai parameter bertipe JSON. |
json_path | Path JSON, seperti $.store.book[0].title. Untuk informasi lebih lanjut, lihat Setel json_path. |
Tipe nilai kembali
double
Contoh
Contoh ini mengekstrak nilai double dari array JSON Results.
Bidang contoh
Results:[{"EndTime":1626314920},{"FireResult":2}]Pernyataan kueri
* | SELECT json_extract_double(Results, '$.0.EndTime')Hasil kueri

Fungsi json_format
Fungsi json_format mengonversi objek JSON menjadi string.
Sintaksis
json_format(x)Parameter
Parameter | Deskripsi |
x | Nilai parameter bertipe JSON. |
Tipe nilai kembali
varchar
Contoh
Contoh ini mengonversi array JSON [1,2,3] menjadi string '[1, 2, 3]'.
Pernyataan kueri (Uji)
* | SELECT json_format(json_parse('[1, 2, 3]'))Hasil kueri

Fungsi json_parse
Fungsi json_parse mengonversi string menjadi tipe JSON dan memvalidasi bahwa string tersebut berada dalam format JSON yang valid. Untuk mengekstrak nilai dari objek JSON, gunakan fungsi json_extract_scalar.
Sintaksis
json_parse(x)Parameter
Parameter | Deskripsi |
x | Nilai parameter adalah sebuah string. |
Tipe nilai kembali
JSON
Contoh
SQL
Contoh 1
Contoh ini mengonversi string '[1,2,3]' menjadi array JSON [1, 2, 3].
Pernyataan kueri (Tes)
* | SELECT json_parse('[1, 2, 3]')Hasil kueri

Contoh 2
Contoh ini mengekstrak setiap subbidang dari bidang
logging.Bidang contoh

Pernyataan kueri (Tes)
*| SELECT map_keys(try_cast(json_parse(logging) AS map(varchar, json)))Hasil kueri

SPL
Contoh ini mengonversi string [1,2,3] menjadi array JSON [1, 2, 3].
Pernyataan SPL
* | extend a = json_parse('[1, 2, 3]')Hasil SPL

Fungsi json_size
Fungsi json_size menghitung jumlah elemen dalam objek JSON atau array JSON.
Sintaksis
json_size(x, json_path)Parameter
Parameter | Deskripsi |
x | Nilai parameter adalah objek JSON atau array JSON. |
json_path | Path JSON, seperti $.store.book[0].title. Untuk informasi lebih lanjut, lihat Atur json_path. |
Tipe nilai kembali
bigint
Contoh
Contoh ini mengembalikan jumlah elemen dalam bidang status.
Bidang contoh
Results:[{"EndTime":1626314920,"FireResult":2,"RawResults":[{"_col0":"1094"}]}]Pernyataan kueri
* | SELECT json_size(Results, '$.0.RawResults')Hasil kueri

Fungsi json_object_flatten
Fungsi json_object_flatten meratakan objek JSON menjadi struktur kunci-nilai satu lapis.
Sintaksis
json_object_flatten(x)Parameter
Parameter | Deskripsi |
x | Nilai parameter bertipe JSON. Jika objek JSON bukan objek, maka akan dikembalikan nilai null. |
Tipe nilai kembali
map(varchar, varchar)
Contoh
Contoh ini meratakan konten JSON dari bidang content menjadi pasangan kunci-nilai satu lapis.
Bidang contoh
content: '{"Time":1626314920,"Info":[{"count":"1"}],"Body":"this is test"}'Pernyataan kueri
select json_object_flatten(content) as data from (values '{"Time":1626314920,"Info":[{"count":"1"}],"Body":"this is test"}') t (content) limit 1;Keluaran