如何在 KQL 中找到动态数组中的特定元素?
例如我在 KQL 中有 json 数组(即字符串)
[{"key": "foo", "val": "bar"}, {"key": "a", "val": "b"}]
。现在我想找出带有 val
键的对象的属性 "a"
的值。它可以位于任何索引处,而不仅仅是像上面的示例中那样位于索引 1
处。
我找到了 array_index_of 函数。但它似乎不接受任何谓词,它只接受索引,而且我事先不知道我的情况下的索引。
有什么方法可以查询 JSON 数组中满足 KQL 中某些条件的项目吗?
我尝试了mv-expand,但它似乎将
key
与val
分开:
datatable (b: dynamic)
[
dynamic({"key": "foo", "val": "bar"}),
dynamic({"key": "a", "val": "b"})
]
| mv-expand b
在 KQL 中,您可以使用 mv-expand 运算符来处理动态数组,然后使用 mv-apply 运算符根据条件过滤元素。在您的情况下,要使用“a”键查找“var”的值,您需要以下区域中的内容:
datatable jsonString string
[
'{"key": "foo", "val": "bar"}, {"key": "a", "val": "b"}',
'{"key": "x", "val": "y"}, {"key": "a", "val": "z"}'
]
| mv-apply parsedJson = parse_json(jsonString) on (
project key = tostring(parsedJson['key']), val = tostring(parsedJson['val'])
)
| where key == "a"
| project val
mv-apply parsedJson = parse_json(jsonString) on (...) parse_json 函数用于将“jsonString”列中的 JSON 字符串转换为对象。然后使用 mv-apply 运算符将此解析应用于数据表的每一行,使用提取的值创建新列“key”和“val”。
where key == "a" 这会过滤行以仅保留“key”为“a”的行
执行查询后,您将获得一个表,其中包含带有“a”键的对象的值
希望我理解正确并且这有任何帮助