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

含动态键的JSON解析求助:无法提取目标数据

动态键JSON答题数据的Power Query解析方案

针对答题JSON数据中answers和submission节点下动态变化的键值,可通过将动态记录转换为列表提取内容的方式解决,以下是具体实现:

核心思路

由于每个answers和submission节点仅包含一组键值对(动态键+目标数据),无需关注键名本身,直接将记录转换为列表后提取唯一元素即可。

完整Power Query M代码示例

假设已将JSON数据导入Power Query并生成名为Source的数据源,执行以下代码:

let
    Source = 导入的JSON数据源, // 替换为你的实际数据源(如From File/From Web等)
    展开事件字段 = Table.ExpandRecordColumn(Source, "event", {"problem_id", "answers", "submission"}, {"problem_id", "answers", "submission"}),
    // 提取answers中的用户输入值
    添加用户答案列 = Table.AddColumn(展开事件字段, "user_answer", each Record.ToList([answers]){0}),
    // 转换submission的动态记录为可展开的结构化数据
    转换提交记录 = Table.TransformColumns(添加用户答案列, {"submission", each Record.ToList(_){0}}),
    // 展开submission中的详细字段
    展开提交详情 = Table.ExpandRecordColumn(转换提交记录, "submission", {"question", "answer", "response_type", "input_type", "correct", "variant", "group_label"}, {"question", "submitted_answer", "response_type", "input_type", "is_correct", "variant", "group_label"}),
    // 清理冗余列
    最终表 = Table.RemoveColumns(展开提交详情, {"answers", "submission"})
in
    最终表

代码说明

  1. 展开事件字段:将嵌套的event记录展开为独立列,暴露problem_id、answers、submission三个核心字段。
  2. 提取用户答案:通过Record.ToList([answers])将动态键的记录转为列表,取第0位元素(唯一值)得到用户输入的答案。
  3. 转换提交记录:同理处理submission,将动态键包裹的记录转为可展开的结构化数据。
  4. 展开提交详情:将submission中的嵌套字段(如correct、response_type等)展开为独立列,符合拆分出不同列的需求。
  5. 清理冗余列:移除不再需要的原始answers和submission列,得到整洁的结构化表格。

效果验证

执行后将生成包含以下字段的结构化表格:

  • problem_id:题目唯一标识
  • user_answer:用户输入的答案
  • question:题目内容(示例中为空)
  • submitted_answer:提交的答案内容
  • response_type:答题类型(如numericalresponse)
  • input_type:输入类型(如formulaequationinput)
  • is_correct:是否正确
  • variant:题目变体
  • group_label:分组标签

内容的提问来源于stack exchange,提问作者Марсель Щербинин

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 17:27:40