parse_json()

适用于:✅Azure 数据资源管理器Azure Monitor✅ 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 的类型为 ,则其值将按原样使用。
  • 如果 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.min118.0110.0)。

datatable(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}}'
]
| extend d = parse_json(context_custom_metrics)
| extend duration_value = d.duration.value, duration_min = d.duration.min

输出

context_custom_metrics d duration_value duration_min
{“duration”:{“value”:118.0,“count”:5.0,“min”:100.0,“max”:150.0,“stdDev”:0.0,“sampledValue”:118.0,“sum”:118.0}} {“duration”:{“value”:118,“count”:5,“min”:100,“max”:150,“stdDev”:0,“sampledValue”:118,“sum”:118}} 118 100

嵌套 JSON 分析

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

例如:

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

输出

print_0
{“a”:123, “b”:“{”c“:456}”}

在这种情况下,不仅需要调用 parse_json 两次,而且还需要确保在第二次调用中使用 tostring。 否则,第二次调用 parse_json 只是将输入传递给输出 as-is,因为它的声明类型 dynamic

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

Ouput

d_b_c
456