全部產品
Search
文件中心

Simple Log Service:JSON函數

更新時間:Jun 30, 2024

本文介紹JSON函數的基本文法及樣本。

Log Service支援如下JSON函數。

重要
  • 在Log Service分析語句中,表示字串的字元必須使用單引號('')包裹,無符號包裹或被雙引號("")包裹的字元表示欄位名或列名。例如:'status'表示字串status,status"status"表示日誌欄位status。

  • 如果日誌欄位的值為JSON類型且需要展開為多行,請使用unnest文法。更多資訊,請參見UNNEST子句

  • 如果字串被解析成JSON類型失敗,則返回null。

  • 如果在採集過程中,JSON日誌被截斷,則在使用JSON函數進行查詢與分析時,系統將報錯且中止查詢與分析。針對該錯誤,您可以使用TRY運算式捕獲異常資訊,使得系統繼續執行查詢和分析操作。例如* | select message, try(json_parse(message))。更多資訊,請參見TRY運算式

函數名稱

文法

說明

支援SQL

支援SPL

json_array_contains函數

json_array_contains(x, value)

判斷JSON數組中是否包含某個值。

json_array_get函數

json_array_get(x, index)

擷取JSON數組中某個下標對應的元素。

×

json_array_length函數

json_array_length(x)

計算JSON數組中元素的數量。

json_extract函數

json_extract(x, json_path)

從JSON對象或JSON數組中提取一組JSON值(數組或對象)。

json_extract_scalar函數

json_extract_scalar(x, json_path)

從JSON對象或JSON數組中提取一組標量值(字串、整數或布爾值)。類似於json_extract函數。

json_format函數

json_format(x)

把JSON類型轉換為字串類型。

json_parse函數

json_parse(x)

把字串類型轉換為JSON類型。

json_size函數

json_size(x, json_path)

計算JSON對象或數組中元素的數量。

json_array_contains函數

json_array_contains函數用於判斷JSON數組中是否包含某個值。

文法

json_array_contains(x, value)

參數說明

參數

說明

x

參數值為JSON數組。

value

數值。

傳回值類型

boolean類型。

樣本

判斷JSON數組[1, 2, 3]中是否包含2。

  • 查詢和分析語句(調試

    * | SELECT json_array_contains('[1, 2, 3]', 2)
  • 查詢和分析結果json_array_contains

json_array_get函數

json_array_get函數用於擷取JSON數組下標對應的元素。

文法

json_array_get(x, index)

參數說明

參數

說明

x

參數值為JSON數組。

index

JSON下標,從0開始。

傳回值類型

varchar類型。

樣本

返回JSON數組["a", [3, 9], "c"]下標為1的元素。

  • 查詢和分析語句(調試

    * | SELECT json_array_get('["a", [3, 9], "c"]', 1)
  • 查詢和分析結果json_array_get

json_array_length函數

json_array_length函數用於計算JSON數組中元素的數量。

文法

json_array_length(x)

參數說明

參數

說明

x

參數值為JSON數組。

傳回值類型

bigint類型。

樣本

  • 樣本1:計算Results欄位值中JSON元素的數量。

    • 欄位範例

      Results:[{"EndTime":1626314920},{"FireResult":2}]
    • 查詢和分析語句

      * | SELECT json_array_length(Results)
    • 查詢和分析結果json_array_length

  • 樣本2:計算time欄位值中JSON元素的數量。

    • 欄位範例

      time:["time_local","request_time","upstream_response_time"]
    • 查詢和分析語句

      * | SELECT json_array_length(time)
    • 查詢和分析結果json_array_length

json_extract函數

json_extract函數用於從JSON對象或JSON數組中提取一組JSON值(數組或對象)。

重要

針對非法的JSON類型,json_extract函數會報錯,建議您使用json_extract_scalar函數。

文法

json_extract(x, json_path)

參數說明

參數

說明

x

參數值為JSON對象或JSON數組。

json_path

JSON路徑,格式為$.store.book[0].title。更多資訊,請參見如何設定json_path

傳回值類型

JSON格式的string類型。

樣本

SQL

擷取Results欄位中EndTime欄位的值。

  • 欄位範例

    Results:[{"EndTime":1626314920},{"FireResult":2}]
  • 查詢和分析語句

    * | SELECT json_extract(Results, '$.0.EndTime')
  • 查詢和分析結果json_extract

SPL

擷取Results欄位中EndTime欄位的值。

  • 欄位範例

Results:[{"EndTime":1626314920},{"FireResult":2}]
  • SPL語句

* | extend a = json_extract(Results, '$.0.EndTime')
  • SPL結果

image.png

json_extract_scalar函數

json_extract_scalar函數用於從JSON對象或JSON數組中提取一組標量值(字串、整數或布爾值)。

文法

json_extract_scalar(x, json_path)

參數說明

參數

說明

x

參數值為JSON對象或JSON數組。

json_path

JSON路徑,格式為$.store.book[0].title。更多資訊,請參見如何設定json_path

傳回值類型

varchar類型。

樣本

SQL

Results欄位中擷取RawResultCount欄位的值,並將該值轉換為bigint類型進行求和。

  • 欄位範例

    Results:[{"EndTime":1626314920},{"RawResultCount":1}]
  • 查詢和分析語句

    * | SELECT sum(cast(json_extract_scalar(Results,'$.1.RawResultCount') AS bigint) )
  • 查詢和分析結果json_extract_scalar

SPL

Results欄位中擷取RawResultCount欄位的值。

  • 欄位範例

Results:[{"EndTime":1626314920},{"RawResultCount":1}]
  • SPL語句

* | extend a = json_extract_scalar(Results, '$.1.RawResultCount')
  • SPL結果image.png

json_format函數

json_format函數用於將JSON類型轉化成字串類型。

文法

json_format(x)

參數說明

參數

說明

x

參數值為JSON類型。

傳回值類型

varchar類型。

樣本

將JSON數組[1,2,3]轉換為字串[1, 2, 3]。

  • 查詢和分析語句(調試

    * | SELECT json_format(json_parse('[1, 2, 3]'))
  • 查詢和分析結果json_format

json_parse函數

json_parse函數只用於將字串類型轉化成JSON類型,判斷是否符合JSON格式。一般情況下,json_parse函數使用意義不大,如果您需要從JSON中提取值,建議使用json_extract_scalar函數。

文法

json_parse(x)

參數說明

參數

說明

x

參數值為字串。

傳回值類型

JSON類型。

樣本

SQL

  • 樣本1

    將字串[1,2,3]轉換為JSON數組[1, 2, 3]。

    • 查詢和分析語句(調試

       * | SELECT json_parse('[1, 2, 3]')
    • 查詢和分析結果json_format

  • 樣本2

    提取logging欄位中的各個子欄位。

    • 欄位範例json_parse

    • 查詢和分析語句(調試

      *| SELECT map_keys(try_cast(json_parse(logging) AS map(varchar, json)))
    • 查詢和分析結果json_parse

SPL

將字串[1,2,3]轉換為JSON數組[1, 2, 3]

  • SPL語句

 * | extend a = json_parse('[1, 2, 3]')
  • SPL結果

image.png

json_size函數

json_size函數用於計算JSON對象或JSON數組中元素的數量。

文法

json_size(x, json_path)

參數說明

參數

說明

x

參數值為JSON對象或JSON數組。

json_path

JSON路徑,格式為$.store.book[0].title。更多資訊,請參見如何設定json_path

傳回值類型

bigint類型。

樣本

返回status欄位中元素的數量。

  • 欄位範例

    Results:[{"EndTime":1626314920,"FireResult":2,"RawResults":[{"_col0":"1094"}]}]
  • 查詢和分析語句

    * | SELECT json_size(Results, '$.0.RawResults')
  • 查詢和分析結果json_size