如何在KQL动态数组中查找满足条件的元素属性值?
KQL查询满足特定条件的JSON数组元素
针对你遇到的问题,这里提供几种实用的解决方法:
方法1:mv-expand配合过滤(最常用)
先将JSON字符串解析为动态数组,通过mv-expand展开数组中的每个对象,再过滤出key为"a"的元素,即可获取对应的val值,完全不会拆分key与val的关联:
datatable(json_str:string) [ '[{"key": "foo", "val": "bar"}, {"key": "a", "val": "b"}]' ] | parse json_str as arr:dynamic | mv-expand arr | where arr.key == "a" | project target_val = arr.val
方法2:array_filter函数(无需展开行)
利用array_filter可以直接通过谓词条件过滤数组元素,返回符合条件的元素数组,再提取对应值:
datatable(json_str:string) [ '[{"key": "foo", "val": "bar"}, {"key": "a", "val": "b"}]' ] | parse json_str as arr:dynamic | project filtered_elements = array_filter(arr, x => x.key == "a") // 如果确定只有一个匹配项,直接取索引0的val;多个匹配可再用mv-expand展开filtered_elements | project target_val = filtered_elements[0].val
方法3:parse运算符(适合结构固定场景)
如果目标对象的JSON格式完全固定,也可以直接用parse运算符匹配提取,不过这种方法通用性较差:
datatable(json_str:string) [ '[{"key": "foo", "val": "bar"}, {"key": "a", "val": "b"}]' ] | parse json_str with * '{"key": "a", "val": "' target_val '"}' * | project target_val
内容的提问来源于stack exchange,提问作者manymanymore
相关产品推荐
相关产品推荐

