Bu konuda örneklerle birlikte JSON işlevlerinin temel sözdizimi açıklanmaktadır.
SLS aşağıdaki JSON işlevlerini destekler.
Log Service sorgu ifadelerinde dizeleri tek tırnak işaretleriyle ('') çevirin. Log Service, tırnak içinde olmayan karakterleri veya çift tırnak ("") içindeki karakterleri bir alan adı veya sütun adı olarak yorumlar. Örneğin,
'status'status dizesini temsil ederken;statusveya"status"status adlı günlük alanını temsil eder.JSON biçimindeki bir günlük alanı değerini birden çok satıra genişletmek için UNNEST yan tümcesini kullanın. Daha fazla bilgi için bkz. UNNEST yan tümcesi.
Bir dize JSON olarak ayrıştırılamazsa işlev null döndürür.
Toplama sırasında bir JSON günlüğü kesilirse, bunun bir JSON işleviyle analiz edilmesi hataya neden olur ve sorguyu iptal eder. Bu hatayı işlemek için istisnayı yakalamak ve sorgunun devam etmesine izin vermek amacıyla işlev çağrısını bir TRY ifadesi içine alın. Örneğin:
* | select message, try(json_parse(message)). Daha fazla bilgi için bkz. TRY ifadesi.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Json_array_contains
Json_array_contains işlevi, bir JSON dizisinin belirli bir değer içerip içermediğini denetler.
Sözdizimi
json_array_contains(x, value)
Parametreler
|
|
|
|
|
|
|
|
|
Dönüş değeri türü
boolean
Örnek
[1, 2, 3] JSON dizisinin 2 değerini içerip içermediğini denetleyin.
-
Sorgu ifadesi (Test)
* | SELECT json_array_contains('[1, 2, 3]', 2) [1, 2, 3] JSON dizisi 2 değerini içerdiğinden sorgu true döndürür.
json_array_get işlevi
Bir JSON dizisinde belirtilen dizindeki öğeyi döndürür.
Sözdizimi
json_array_get(x, index)
Parametreler
|
|
|
|
|
|
|
|
|
Dönüş türü
varchar
Örnek
["a", [3, 9], "c"] JSON dizisinden 1 dizinindeki öğeyi döndürür.
-
Sorgu ifadesi (Test)
* | SELECT json_array_get('["a", [3, 9], "c"]', 1) Sorgu sonucu [3,9] değeridir.
json_array_length işlevi
Bir JSON dizisindeki öğeleri sayar.
Sözdizimi
json_array_length(x)
Parametreler
|
|
|
|
|
|
Dönüş değeri türü
bigint
Örnekler
-
Örnek 1: Results alanındaki JSON dizisinin öğelerini sayar.
-
Örnek alan
Results:[{"EndTime":1626314920},{"FireResult":2}] -
Sorgu ve analiz ifadesi
* | SELECT json_array_length(Results) Sonuç 2 değeridir.
-
-
Örnek 2: time alanındaki JSON dizisinin öğelerini sayar.
-
Örnek alan
time:["time_local","request_time","upstream_response_time"] -
Sorgu ve analiz ifadesi
* | SELECT json_array_length(time) Sonuç 3 değeridir.
-
Json_extract işlevi
json_extract işlevi, bir JSON nesnesinden veya JSON dizisinden bir JSON nesnesi ya da JSON dizisi gibi bir JSON değeri ayıklar.
json_extract işlevi, geçersiz JSON türleri için hata döndürür. Bunun yerine json_extract_scalar işlevini kullanın.
Sözdizimi
json_extract(x, json_path)
Parametreler
|
|
|
|
|
|
|
|
|
Dönüş değeri türü
JSON biçimli bir dize.
Örnekler
SQL
Results alanından EndTime alanının değerini ayıklayın.
-
Örnek veriler
Results:[{"EndTime":1626314920},{"FireResult":2}] -
Sorgu ifadesi
* | SELECT json_extract(Results, '$.0.EndTime') Sorgu 1626314920 değerini döndürür.
SPL
Results alanından EndTime alanının değerini ayıklayın.
Örnek veriler
Results:[{"EndTime":1626314920},{"FireResult":2}]
SPL ifadesi
* | extend a = json_extract(Results, '$.0.EndTime')
SPL sonucu
Sonuç, 1626314920 olarak ayarlanmış a alanını içerir.
json_extract_scalar
Json_extract_scalar işlevi, bir JSON nesnesinden veya JSON dizisinden skaler bir değer (dize, tamsayı veya Boolean) ayıklar.
Sözdizimi
json_extract_scalar(x, json_path)
Parametreler
|
|
|
|
|
|
|
|
|
Dönüş türü
varchar
Örnekler
SQL
Results alanından RawResultCount alanının değerini ayıklayın, değeri bigint'e dönüştürün ve ardından toplamı hesaplayın.
-
Örnek veriler
Results:[{"EndTime":1626314920},{"RawResultCount":1}] -
Sorgu ifadesi
* | SELECT sum(cast(json_extract_scalar(Results,'$.1.RawResultCount') AS bigint) ) Sorgu sonucu 288 değeridir.
SPL
Results alanından RawResultCount alanının değerini ayıklayın.
Örnek veriler
Results:[{"EndTime":1626314920},{"RawResultCount":1}]
SPL ifadesi
* | extend a = json_extract_scalar(Results, '$.1.RawResultCount')
a alanının değeri 1 değeridir.
json_extract_bool
Bir JSON nesnesinden veya JSON dizisinden bir boolean değeri ayıklar. Ayıklama başarısız olursa null döndürür.
Sözdizimi
json_extract_bool(x, json_path)
Parametreler
|
|
|
|
|
|
|
|
|
Dönüş değeri türü
boolean
Örnek
Results JSON dizisinden bir boolean değeri ayıklayın.
-
Örnek alan
Results:[{"ret":true},{"status":FALSE}] -
Sorgu ifadesi
* | SELECT json_extract_bool(Results, '$.0.ret') -
Sorgu sonucu
Sorgu true döndürür.
json_extract_long
Bir JSON nesnesinden veya JSON dizisinden bir bigint değeri ayıklar. Ayıklama başarısız olursa null döndürür.
Sözdizimi
json_extract_long(x, json_path)
Parametreler
|
|
|
|
|
|
|
|
|
Dönüş değeri
bigint
Örnek
Bu örnekte Results JSON dizisinden bir bigint değeri ayıklanır.
-
Örnek alan
Results:[{"EndTime":1626314920},{"FireResult":2}] -
Sorgu ifadesi
* | SELECT json_extract_long(Results, '$.0.EndTime') -
Sorgu sonucu
1626314920 döndürür.
Json_extract_double
Bir JSON nesnesinden veya JSON dizisinden bir double değeri ayıklar. Ayıklama başarısız olursa null döndürür.
Sözdizimi
json_extract_double(x, json_path)
Parametreler
|
|
|
|
|
|
|
|
|
Dönüş türü
double
Örnek
Results JSON dizisinden bir double değeri ayıklayın.
-
Örnek alan
Results:[{"EndTime":1626314920},{"FireResult":2}] -
Sorgu ve analiz ifadesi
* | SELECT json_extract_double(Results, '$.0.EndTime') -
Sorgu ve analiz sonucu
Sorgu 1626314920.0 değerini döndürür.
json_format işlevi
Json_format işlevi, bir JSON değerini dize olarak biçimlendirir.
Sözdizimi
json_format(x)
Parametreler
|
|
|
|
|
|
Dönüş türü
Varchar.
Örnek
[1,2,3] JSON dizisini '[1, 2, 3]' dizesine dönüştürür.
-
Sorgu ifadesi (Test)
* | SELECT json_format(json_parse('[1, 2, 3]')) Sorgu sonucu '[1, 2, 3]' değeridir.
json_parse işlevi
json_parse işlevi, bir dizeyi JSON türüne dönüştürerek biçimini doğrular. Ancak bu işlevin kullanım alanı sınırlıdır. Bir JSON dizesinden değer ayıklamak için json_extract_scalar işlevini kullanın.
Sözdizimi
json_parse(x)
Parametreler
|
|
|
|
|
|
Dönüş değeri türü
JSON türü.
Örnekler
SQL
-
Örnek 1
'[1, 2, 3]' dizesini [1, 2, 3] JSON dizisine dönüştürür.
-
Sorgu ifadesi (Test)
* | SELECT json_parse('[1, 2, 3]') Sorgu sonucu [1, 2, 3] değeridir.
-
-
Örnek 2
loggingalanından anahtarları ayıklar.Bu örnekte, message, processName, thread, threadName, module, funcName, levelname ve process gibi anahtar-değer çiftleri içeren bir JSON nesnesi olan
loggingalanı işlenir.-
Sorgu ifadesi (Test)
*| SELECT map_keys(try_cast(json_parse(logging) AS map(varchar, json))) Sorgu sonucu ["funcName","levelname","message","module","process","processName","thread","threadName"] değeridir.
SPL
'[1, 2, 3]' dizesini [1, 2, 3] JSON dizisine dönüştürür.
SPL ifadesi
* | extend a = json_parse('[1, 2, 3]')
SPL sonucu
a alanının değeri [1, 2, 3] değeridir.
json_size işlevi
Json_size işlevi, bir JSON nesnesindeki veya JSON dizisindeki öğe sayısını döndürür.
Sözdizimi
json_size(x, json_path)
Parametreler
|
|
|
|
|
|
|
|
|
Dönüş değeri türü
bigint
Örnek
Bu örnekte RawResults alanındaki öğe sayısı hesaplanır.
-
Örnek alan
Results:[{"EndTime":1626314920,"FireResult":2,"RawResults":[{"_col0":"1094"}]}] -
Sorgu ifadesi
* | SELECT json_size(Results, '$.0.RawResults') Sorgu sonucu 1 değeridir.
json_object_flatten işlevi
Bir JSON nesnesini tek katmanlı bir anahtar-değer yapısına düzleştirir.
Sözdizimi
json_object_flatten(x)
Parametreler
|
|
|
|
|
|
Dönüş değeri türü
map(varchar, varchar)
Örnek
'content' alanındaki JSON nesnesini tek katmanlı bir anahtar-değer yapısına düzleştirir.
-
Örnek alan
content: '{"Time":1626314920,"Info":[{"count":"1"}],"Body":"this is test"}' -
Sorgu ifadesi
select json_object_flatten(content) as data from (values '{"Time":1626314920,"Info":[{"count":"1"}],"Body":"this is test"}') t (content) limit 1; -
Çıktı
Veri alanının değeri {"Time":"1626314920","Info":"[{\"count\":\"1\"}]","Body":"this is test"} değeridir. Bu, orijinal JSON nesnesinin tek katmanlı bir anahtar-değer yapısına düzleştirildiğini gösterir.