parse_json()

适用于:✅Azure 数据资源管理器Azure MonitorMicrosoft Sentinel

string 解释为 JSON 值并以 dynamic 形式返回值。 如果可能,该值将转换为相关的数据类型。 对于没有数据类型转换的严格分析,请使用 extract()extract_json() 函数。

如果需要提取 JSON 复合对象的多个元素,则最好使用 parse_json() 函数而不是 extract_json() 函数。 请尽可能使用 dynamic()

弃用的别名:parsejson()、toobject()、todynamic()

语法

parse_json(json)

详细了解语法约定

参数

客户 类型​​ 必需 说明
json string ✔️ 采用 JSON 格式值或要分析为 JSON 的动态属性包形式的字符串。

返回

dynamic 类型的对象,该对象由 json 的值确定:

  • 如果 json 的类型为 dynamic,则其值将按原样使用。
  • 如果 json 的类型为 string,并且是格式正确的 JSON 字符串,则系统会分析字符串并返回生成的值。
  • 如果 json 的类型为 string,但不是格式正确的 JSON 字符串,则返回的值是包含原始 string 值的类型为 dynamic 的对象。

示例

在以下示例中,如果 context_custom_metrics 是类似如下的 string

{"duration":{"value":118.0,"count":5.0,"min":100.0,"max":150.0,"stdDev":0.0,"sampledValue":118.0,"sum":118.0}}

则以下查询将检索对象中 duration 槽的值,并从中检索两个槽,duration.valueduration.min(分别为 118.0110.0)。

T
| extend d=parse_json(context_custom_metrics) 
| extend duration_value=d.duration.value, duration_min=d["duration"]["min"]

备注

通常用一个 JSON 字符串来描述属性包,其中的一个“槽”是另一个 JSON 字符串。

例如:

let d='{"a":123, "b":"{\\"c\\":456}"}';
print d

在这种情况下,不仅需要调用 parse_json 两次,而且还需要确保在第二次调用中使用 tostring。 否则,对 parse_json 的第二次调用会只按原样将输入传递到输出,因为它的已声明类型为 dynamic

let d='{"a":123, "b":"{\\"c\\":456}"}';
print d_b_c=parse_json(tostring(parse_json(d).b)).c