Topik ini mencakup sintaks dasar fungsi JSON beserta contohnya.
SLS mendukung fungsi JSON berikut.
-
Dalam pernyataan kueri Log Service, sertakan string dalam tanda kutip tunggal (''). Log Service menginterpretasikan karakter tanpa tanda kutip atau karakter dalam tanda kutip ganda ("") sebagai nama field atau nama kolom. Misalnya,
'status'merepresentasikan string status, sedangkanstatusatau"status"merepresentasikan field log bernama status. -
Untuk memperluas nilai field log berformat JSON menjadi beberapa baris, gunakan klausa UNNEST. Untuk informasi selengkapnya, lihat UNNEST clause.
-
Jika string gagal diurai sebagai JSON, fungsi tersebut mengembalikan null.
-
Jika log JSON terpotong selama pengumpulan, menganalisisnya dengan fungsi JSON akan mengembalikan error dan menghentikan kueri. Untuk menangani error ini, bungkus pemanggilan fungsi dalam ekspresi TRY untuk menangkap pengecualian dan memungkinkan kueri dilanjutkan. Misalnya,
* | select message, try(json_parse(message)). Untuk informasi selengkapnya, lihat TRY expression.
|
Nama Fungsi |
Sintaks |
Deskripsi |
Dukungan SQL |
Dukungan SPL |
|
json_array_contains(x, value) |
Memeriksa apakah array JSON berisi nilai tertentu. |
√ |
√ |
|
|
json_array_get(x, index) |
Mengembalikan elemen pada indeks tertentu dalam array JSON. |
√ |
× |
|
|
json_array_length(x) |
Mengembalikan jumlah elemen dalam array JSON. |
√ |
√ |
|
|
json_extract(x, json_path) |
Mengekstraksi objek JSON atau array JSON dari objek JSON atau array JSON. |
√ |
√ |
|
|
json_extract_scalar(x, json_path) |
Mengekstraksi nilai skalar, seperti string, integer, atau nilai boolean, dari objek JSON atau array JSON. |
√ |
√ |
|
|
json_extract_bool(x, json_path) |
Mengekstraksi nilai boolean dari objek JSON atau array JSON. |
√ |
× |
|
|
json_extract_long(x, json_path) |
Mengekstraksi nilai bigint dari objek JSON atau array JSON. |
√ |
× |
|
|
json_extract_double(x, json_path) |
Mengekstraksi nilai double dari objek JSON atau array JSON. |
√ |
× |
|
|
json_format(x) |
Memformat nilai JSON menjadi string. |
√ |
√ |
|
|
json_parse(x) |
Mengurai string menjadi nilai JSON. |
√ |
√ |
|
|
json_size(x, json_path) |
Mengembalikan jumlah elemen dalam array JSON atau jumlah pasangan kunci-nilai dalam objek JSON. |
√ |
√ |
|
|
json_object_flatten(x) |
Meratakan objek JSON menjadi struktur kunci-nilai satu lapis. |
√ |
× |
Json_array_contains
Fungsi json_array_contains memeriksa apakah array JSON berisi nilai tertentu.
Sintaks
json_array_contains(x, value)
Parameter
|
Parameter |
Deskripsi |
|
x |
Array JSON. |
|
value |
Nilai yang dicari dalam array JSON. |
Tipe nilai kembalian
boolean
Contoh
Periksa apakah array JSON [1, 2, 3] berisi nilai 2.
-
Pernyataan kueri (Test)
* | SELECT json_array_contains('[1, 2, 3]', 2) -
Kueri mengembalikan true karena array JSON [1, 2, 3] berisi 2.
json_array_get function
Mengembalikan elemen pada indeks tertentu dalam array JSON.
Sintaks
json_array_get(x, index)
Parameter
|
Parameter |
Deskripsi |
|
x |
Array JSON. |
|
index |
Indeks elemen berbasis nol. |
Tipe kembalian
varchar
Contoh
Mengembalikan elemen pada indeks 1 dari array JSON ["a", [3, 9], "c"].
-
Pernyataan kueri (Test)
* | SELECT json_array_get('["a", [3, 9], "c"]', 1) -
Hasil kueri adalah [3,9].
json_array_length function
Menghitung jumlah elemen dalam array JSON.
Sintaks
json_array_length(x)
Parameter
|
Parameter |
Deskripsi |
|
x |
Array JSON sumber. |
Tipe nilai kembalian
bigint
Contoh
-
Contoh 1: Menghitung jumlah elemen array JSON dalam field Results.
-
Field contoh
Results:[{"EndTime":1626314920},{"FireResult":2}] -
Pernyataan kueri dan analisis
* | SELECT json_array_length(Results) -
Hasilnya adalah 2.
-
-
Contoh 2: Menghitung jumlah elemen array JSON dalam field time.
-
Field contoh
time:["time_local","request_time","upstream_response_time"] -
Pernyataan kueri dan analisis
* | SELECT json_array_length(time) -
Hasilnya adalah 3.
-
Json_extract function
Fungsi json_extract mengekstraksi nilai JSON, seperti objek JSON atau array JSON, dari objek JSON atau array JSON.
Fungsi json_extract mengembalikan error untuk tipe JSON yang tidak valid. Gunakan fungsi json_extract_scalar sebagai gantinya.
Sintaks
json_extract(x, json_path)
Parameter
|
Parameter |
Deskripsi |
|
x |
Objek JSON atau array JSON. |
|
json_path |
Jalur JSON, seperti |
Tipe nilai kembalian
String berformat JSON.
Contoh
SQL
Mengekstraksi nilai field EndTime dari field Results.
-
Data contoh
Results:[{"EndTime":1626314920},{"FireResult":2}] -
Pernyataan kueri
* | SELECT json_extract(Results, '$.0.EndTime') -
Kueri mengembalikan 1626314920.
SPL
Mengekstraksi nilai field EndTime dari field Results.
-
Data contoh
Results:[{"EndTime":1626314920},{"FireResult":2}]
-
Pernyataan SPL
* | extend a = json_extract(Results, '$.0.EndTime')
-
Hasil SPL
Hasilnya mencakup field a yang diatur ke 1626314920.
json_extract_scalar
Fungsi json_extract_scalar mengekstraksi nilai skalar (string, integer, atau Boolean) dari objek JSON atau array JSON.
Sintaks
json_extract_scalar(x, json_path)
Parameter
|
Parameter |
Deskripsi |
|
x |
Objek JSON atau array JSON. |
|
json_path |
Jalur JSON, seperti $.store.book[0].title. Untuk informasi selengkapnya, lihat Set the json_path. |
Tipe kembalian
varchar
Contoh
SQL
Mengekstraksi nilai field RawResultCount dari field Results, mengonversi nilainya ke bigint, lalu menghitung jumlahnya.
-
Data contoh
Results:[{"EndTime":1626314920},{"RawResultCount":1}] -
Pernyataan kueri
* | SELECT sum(cast(json_extract_scalar(Results,'$.1.RawResultCount') AS bigint) ) -
Hasil kueri adalah 288.
SPL
Mengekstraksi nilai field RawResultCount dari field Results.
-
Data contoh
Results:[{"EndTime":1626314920},{"RawResultCount":1}]
-
Pernyataan SPL
* | extend a = json_extract_scalar(Results, '$.1.RawResultCount')
-
Nilai field a adalah 1.
json_extract_bool
Mengekstraksi nilai boolean dari objek JSON atau array JSON. Mengembalikan null jika ekstraksi gagal.
Sintaks
json_extract_bool(x, json_path)
Parameter
|
Parameter |
Deskripsi |
|
x |
Objek JSON atau array JSON. |
|
json_path |
Jalur JSON, seperti $.store.book[0].title. Untuk informasi selengkapnya, lihat Set the json_path. |
Tipe nilai kembalian
boolean
Contoh
Mengekstraksi nilai boolean dari array JSON Results.
-
Field contoh
Results:[{"ret":true},{"status":FALSE}] -
Pernyataan kueri
* | SELECT json_extract_bool(Results, '$.0.ret') -
Hasil kueri
Kueri mengembalikan true.
json_extract_long
Mengekstraksi nilai bigint dari objek JSON atau array JSON. Mengembalikan null jika ekstraksi gagal.
Sintaks
json_extract_long(x, json_path)
Parameter
|
Parameter |
Deskripsi |
|
x |
Nilai JSON. |
|
json_path |
Jalur JSON, seperti $.store.book[0].title. Untuk informasi selengkapnya, lihat Set the json_path. |
Nilai kembalian
bigint
Contoh
Contoh ini mengekstraksi nilai bigint dari array JSON Results.
-
Field contoh
Results:[{"EndTime":1626314920},{"FireResult":2}] -
Pernyataan kueri
* | SELECT json_extract_long(Results, '$.0.EndTime') -
Hasil kueri
Mengembalikan 1626314920.
Json_extract_double
Mengekstraksi nilai double dari objek JSON atau array JSON. Mengembalikan null jika ekstraksi gagal.
Sintaks
json_extract_double(x, json_path)
Parameter
|
Parameter |
Deskripsi |
|
x |
Objek JSON atau array JSON. |
|
json_path |
Jalur JSON, seperti $.store.book[0].title. Untuk detailnya, lihat How to set json_path. |
Tipe kembalian
double
Contoh
Mengekstraksi nilai double dari array JSON Results.
-
Field contoh
Results:[{"EndTime":1626314920},{"FireResult":2}] -
Pernyataan kueri dan analisis
* | SELECT json_extract_double(Results, '$.0.EndTime') -
Hasil kueri dan analisis
Kueri mengembalikan 1626314920.0.
json_format function
Fungsi json_format memformat nilai JSON sebagai string.
Sintaks
json_format(x)
Parameter
|
Parameter |
Deskripsi |
|
x |
Nilai JSON. |
Tipe kembalian
Varchar.
Contoh
Mengonversi array JSON [1,2,3] menjadi string '[1, 2, 3]'.
-
Pernyataan kueri (Test)
* | SELECT json_format(json_parse('[1, 2, 3]')) -
Hasil kueri adalah '[1, 2, 3]'.
json_parse function
Fungsi json_parse mengonversi string ke tipe JSON, sekaligus memvalidasi formatnya. Namun, fungsi ini memiliki penggunaan terbatas. Untuk mengekstraksi nilai dari string JSON, gunakan fungsi json_extract_scalar.
Sintaks
json_parse(x)
Parameter
|
Parameter |
Deskripsi |
|
x |
Ekspresi string. |
Tipe nilai kembalian
Tipe JSON.
Contoh
SQL
-
Contoh 1
Mengonversi string '[1, 2, 3]' menjadi array JSON [1, 2, 3].
-
Pernyataan kueri (Test)
* | SELECT json_parse('[1, 2, 3]') -
Hasil kueri adalah [1, 2, 3].
-
-
Contoh 2
Mengekstraksi kunci dari field
logging.-
Contoh ini memproses field
logging, yang merupakan objek JSON yang berisi pasangan kunci-nilai seperti message, processName, thread, threadName, module, funcName, levelname, dan process. -
Pernyataan kueri (Test)
*| SELECT map_keys(try_cast(json_parse(logging) AS map(varchar, json))) -
Hasil kueri adalah ["funcName","levelname","message","module","process","processName","thread","threadName"].
-
SPL
Mengonversi string '[1, 2, 3]' menjadi array JSON [1, 2, 3].
-
Pernyataan SPL
* | extend a = json_parse('[1, 2, 3]')
-
Hasil SPL
Nilai field a adalah [1, 2, 3].
json_size function
Fungsi json_size mengembalikan jumlah elemen dalam objek JSON atau array JSON.
Sintaks
json_size(x, json_path)
Parameter
|
Parameter |
Deskripsi |
|
x |
Objek JSON atau array JSON. |
|
json_path |
Jalur JSON, seperti $.store.book[0].title. Untuk informasi selengkapnya, lihat Set the json_path. |
Tipe nilai kembalian
bigint
Contoh
Contoh ini menghitung jumlah elemen dalam field RawResults.
-
Field contoh
Results:[{"EndTime":1626314920,"FireResult":2,"RawResults":[{"_col0":"1094"}]}] -
Pernyataan kueri
* | SELECT json_size(Results, '$.0.RawResults') -
Hasil kueri adalah 1.
json_object_flatten function
Meratakan objek JSON menjadi struktur kunci-nilai satu lapis.
Sintaks
json_object_flatten(x)
Parameter
|
Parameter |
Deskripsi |
|
x |
Menentukan nilai JSON yang akan diratakan. Fungsi mengembalikan null jika input bukan objek JSON. |
Tipe nilai kembalian
map(varchar, varchar)
Contoh
Meratakan objek JSON dalam field 'content' menjadi struktur kunci-nilai satu lapis.
-
Field 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; -
Output
Nilai field data adalah {"Time":"1626314920","Info":"[{\"count\":\"1\"}]","Body":"this is test"}. Ini menunjukkan bahwa objek JSON asli telah diratakan menjadi struktur kunci-nilai satu lapis.