如何基于JSON实现条件过滤?避免字符串搜索的方案
在Kusto中过滤JSON数组里isDefault=true的条目(避免字符串搜索)
可以用Kusto的mv-expand运算符先将JSON数组拆分为独立记录,再直接通过布尔属性过滤,完全不需要依赖字符串匹配,实现精准筛选。
基础筛选(展开单条记录)
let T = datatable (id: int) [1, 2, 3]; T | extend json = dynamic([ { "capabilities":"None", "isDefault":false, "isInitial":false, "name":"contoso.fr", "type":"Managed"}, { "capabilities":"Mail", "isDefault":true, "isInitial":false, "name":"login.contoso.com", "type":"Managed"}, { "capabilities":"Mail,Office", "isDefault":false, "isInitial":false, "name":"contoso.com", "type":"Managed"} ]) | extend data = parse_json(json) | mv-expand data // 把JSON数组拆成单条记录,每条对应一个数组对象 | where data.isDefault == true // 直接用布尔属性过滤,精准可靠 | project id, data // 保留需要的字段
聚合筛选结果(重新组合为数组)
如果需要把同一id下筛选出的对象重新聚合为JSON数组,可以配合summarize和make_list:
let T = datatable (id: int) [1, 2, 3]; T | extend json = dynamic([ { "capabilities":"None", "isDefault":false, "isInitial":false, "name":"contoso.fr", "type":"Managed"}, { "capabilities":"Mail", "isDefault":true, "isInitial":false, "name":"login.contoso.com", "type":"Managed"}, { "capabilities":"Mail,Office", "isDefault":false, "isInitial":false, "name":"contoso.com", "type":"Managed"} ]) | extend data = parse_json(json) | mv-expand data | where data.isDefault == true | summarize filtered_data = make_list(data) by id // 按id聚合筛选后的对象为数组 | project id, filtered_data
内容的提问来源于stack exchange,提问作者Razi
相关产品推荐
相关产品推荐

