在Kusto中合并两个dynamic列并保留JSON数据结构的方法
Kusto两列Dynamic JSON合并解决方案
要将表中两个dynamic类型的JSON列合并为一列(输出为逗号分隔的JSON对象形式),可以通过以下方式实现:
基础实现(直接拼接字符串)
let OriginalTable = datatable(data1:dynamic, data2:dynamic) [ dynamic({"name":"Name_1","data":[5,6,7,8]}), dynamic({"extra":"info1"}), dynamic({"name":"Name_2","data":[9,10,11,12]}), dynamic({"extra":"info2"}) ]; OriginalTable // 将两个dynamic列转为字符串,用逗号加换行拼接 | project combined_json = strcat(tostring(data1), ",\n", tostring(data2))
格式化输出(带缩进换行)
如果需要输出格式化后的美观JSON格式,可使用format_dynamic函数处理:
let OriginalTable = datatable(data1:dynamic, data2:dynamic) [ dynamic({"name":"Name_1","data":[5,6,7,8]}), dynamic({"extra":"info1"}), dynamic({"name":"Name_2","data":[9,10,11,12]}), dynamic({"extra":"info2"}) ]; OriginalTable // 先打包为数组再格式化,最后移除数组方括号 | extend combined_obj = pack_array(data1, data2) | project combined_json = replace_string(replace_string(format_dynamic(combined_obj), "[", ""), "]", "")
说明
tostring():将dynamic类型的JSON对象转换为字符串,避免直接拼接导致的结构混乱;pack_array():将两个JSON对象打包为数组,方便后续统一格式化;format_dynamic():生成带缩进、换行的可读JSON格式,再通过replace_string()去掉数组的方括号,得到预期的逗号分隔形式。
如果需求是将表中所有行的JSON对象合并为一个逗号分隔列表(而非每行两列合并),可使用以下代码:
let OriginalTable = datatable(data:dynamic) [ dynamic({"name":"Name_1","data":[5,6,7,8]}), dynamic({"name":"Name_2","data":[9,10,11,12]}) ]; OriginalTable | summarize all_objs = make_list(data) | project combined_json = strcat_array(all_objs, ",\n")
内容的提问来源于stack exchange,提问作者user1997
相关产品推荐
相关产品推荐

