如何在KQL中的动态数组中找到特定的元素?
例如,我有json数组(即字符串)[{"key": "foo", "val": "bar"}, {"key": "a", "val": "b"}]
在KQL中。现在我想找出具有"a"
键的对象的val
属性的值。它可以是任何索引,而不仅仅是上面示例中的索引1
。
我找到了array_index_of函数。但它似乎不接受任何 predicate ,它只接受索引,我事先不知道我的例子中的索引。
是否有任何方法可以在JSON数组中查询满足KQL中某些条件的项?
我试过mv-expand,但它似乎将key
和val
分开:
datatable (b: dynamic)
[
dynamic({"key": "foo", "val": "bar"}),
dynamic({"key": "a", "val": "b"})
]
| mv-expand b
字符串
的数据
2条答案
按热度按时间tsm1rwdh1#
现在,我想找出具有
"a"
键的对象的属性val
的值。我已经在我的环境中重现了,以下是预期结果:
您可以使用**
bag_unpack()
**然后获得如下所示的值:字符串
x1c 0d1x的数据
Output:
的
Fiddle的数据。
你知道为什么在我上面的例子中,它会把一个动态分成两部分吗?例如,键foo和瓦尔bar位于不同的行中。
mv-exapnd基于逗号“,”和新行划分动态数组,因此它像这样划分,这是预期的行为。
jei2mxaa2#
在KQL中,可以使用mv-expand运算符处理动态数组,然后使用mv-apply运算符根据条件过滤元素。在你的例子中,为了找到'var'的值,关键字为'a',你需要在以下区域中找到一些东西:
字符串
**mv-apply parsedJson = parse_json(jsonString)on(...)**parse_json函数用于将jsonString列中的JSON字符串转换为对象。然后使用mv-apply操作符将此解析应用于datatable的每一行,创建具有提取值的新列“key”和“瓦尔”。
**where key ==“a”**这将过滤行,仅保留“key”为“a”的行
执行查询后,您将得到一个表,其中包含带有“a”键的对象的值
编辑:要在同一行上获取key和瓦尔,可以在project语句中使用mv-apply运算符。这将允许您对动态数组的每个元素应用投影,并将属性key和瓦尔合并到一行中。
型
我的示例数据的输出是:
型