如何在 KQL 中找到动态数组中的特定元素?

问题描述 投票:0回答:1

如何在 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

arrays json filter predicate kql
1个回答
1
投票

在 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”键的对象的值

希望我理解正确并且这有任何帮助

© www.soinside.com 2019 - 2024. All rights reserved.