Kusto中如何筛选dynamic列合法JSON值供evaluate bag_unpack使用
解决方案
bag_unpack执行失败的核心原因是输入的dynamic值里混有非合法JSON对象的内容,只要提前把无效值清洗掉,只传入合法JSON结构的动态值即可解决。
直接用内置的try_parse_json()函数做容错解析就行:这个函数会尝试把输入内容解析为标准JSON动态值,遇到HTML、语法残缺的JSON这类非法输入时,会直接返回null,不会抛出异常中断查询。
可直接套用的代码模板
// 替换为实际的表名、存JSON内容的dynamic列名即可 <你的业务表名> | extend clean_bag = try_parse_json(tostring(<你的dynamic列名>)) // 要丢弃含无效值的行就保留下面这行,要保留无效行仅让解包字段留空就注释掉 | where isnotnull(clean_bag) | evaluate bag_unpack(clean_bag)
对你给出的示例数据的处理说明
示例里的4行数据会按如下规则处理,全程不会抛错:
{"message":"msg1","code":"1"}:合法JSON,正常解包出message、code两个字段,对应值分别为msg1、1<html><body>Server Down</body></html>:非JSON格式内容,解析为null,不传入解包逻辑{"message":"msg2","code":2"}:JSON语法错误(数字2后存在冗余引号),解析为null,不传入解包逻辑{"message":"msg3","code":"3"}:合法JSON,正常解包出message、code两个字段,对应值分别为msg3、3
注意点
- 禁止直接对原始未清洗的dynamic列调用
bag_unpack:只要列中存在1个不符合JSON对象规范的值,整个解包操作就会直接失败。 - 过滤掉无效null值的写法性能更好,不需要保留无效行的话建议加上
where isnotnull(clean_bag)条件。
内容的提问来源于stack exchange,提问作者Bineet Singh
相关产品推荐
相关产品推荐

