You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

KQL:将含无键嵌套JSON数组的日志转换为指定表格结构

解决方案(基于Kusto Query Language)

你遇到的核心问题是原JSON中的分类为动态键,直接使用parse_json()+mv-expand会将这些键解析为列名,而非列值。可以通过bag_to_rows()函数先把动态键值对转换为行结构,再展开商品数组,具体实现如下:

完整查询示例

假设你的日志表名为AppLogs,执行以下KQL查询:

AppLogs
| extend LogEntryParsed = parse_json(LogEntry)
// 将JSON动态键值对转为行:Category存分类标识,Items存对应商品数组
| evaluate bag_to_rows(LogEntryParsed, Category, Items)
// 展开每个分类下的商品数组,每行对应单个商品
| mv-expand Items
// 提取商品的各个字段
| extend 
    item_description = Items.item_description,
    item_price = Items.item_price,
    sku = Items.sku
// 保留目标列,移除临时中间列
| project Category, item_description, item_price, sku

步骤说明

  1. 解析JSON字符串:parse_json(LogEntry)将字符串格式的日志内容转换为可操作的动态对象LogEntryParsed。
  2. 动态键转列值:evaluate bag_to_rows(...)是核心操作,它会把LogEntryParsed中的每个分类键(如category1/sub_category)作为Category列的值,对应的商品数组存入Items列,彻底解决动态键无法作为列值的问题。
  3. 展开商品数组:mv-expand Items将每个分类下的商品数组拆分为独立行,每行对应一个商品条目。
  4. 提取商品字段:通过.操作符从Items对象中直接提取item_description、item_price、sku字段。
  5. 整理输出列:project语句保留需要的目标列,剔除过程中生成的临时列。

预期输出结果

针对你提供的日志内容,执行查询后会得到如下表格:

Categoryitem_descriptionitem_pricesku
category1/sub_categoryitem11.212
category2/sub_categoryitem25.0123
category2/sub_categoryitem35.01234

内容的提问来源于stack exchange,提问作者Janie Zhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 02:25:04