parse_json()
将 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.value
和 duration.min
(分别为 118.0
和 110.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