含动态键的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 最终表
代码说明
- 展开事件字段:将嵌套的
event记录展开为独立列,暴露problem_id、answers、submission三个核心字段。 - 提取用户答案:通过
Record.ToList([answers])将动态键的记录转为列表,取第0位元素(唯一值)得到用户输入的答案。 - 转换提交记录:同理处理
submission,将动态键包裹的记录转为可展开的结构化数据。 - 展开提交详情:将submission中的嵌套字段(如
correct、response_type等)展开为独立列,符合拆分出不同列的需求。 - 清理冗余列:移除不再需要的原始
answers和submission列,得到整洁的结构化表格。
效果验证
执行后将生成包含以下字段的结构化表格:
problem_id:题目唯一标识user_answer:用户输入的答案question:题目内容(示例中为空)submitted_answer:提交的答案内容response_type:答题类型(如numericalresponse)input_type:输入类型(如formulaequationinput)is_correct:是否正确variant:题目变体group_label:分组标签
内容的提问来源于stack exchange,提问作者Марсель Щербинин
相关产品推荐
相关产品推荐

