JQ查询重构嵌套JSON:多层JSON转目标格式求助
问题解决:JSON结构转换与Python替代库
一、正确的JQ查询语句
针对你的JSON结构转换需求,以下是可以得到预期结果的JQ查询:
{ "order": [ .orders[] | { id: .id, items: [ .order[] | .items[] | { name: .name, type: (.type | reduce .[] as $t ({}; .[$t.name] = $t.value[0].value)) } ] } ] }
逻辑说明:
- 外层直接构建目标格式的
order数组 - 遍历原JSON的
orders数组,保留每个订单的id字段 - 展开每个订单下的
order数组,提取其中的items元素 - 对每个商品的
type数组,通过reduce将数组型的键值对转换为对象格式,同时取出value数组中第一个元素的实际值 - 自动忽略原数据中空的
id字段
二、Python中类似JQ功能的JSON解析库
如果需要在Python中实现类似JQ的JSON处理能力,推荐以下几个库:
jq:直接封装了JQ的核心功能,语法和JQ完全一致,学习成本低。安装命令:
pip install jq
示例代码:import jq import json # 加载原始JSON数据 with open("input.json", "r") as f: raw_data = json.load(f) # 使用JQ查询处理数据 jq_query = ''' { "order": [ .orders[] | { id: .id, items: [ .order[] | .items[] | { name: .name, type: (.type | reduce .[] as $t ({}; .[$t.name] = $t.value[0].value)) } ] } ] } ''' processed_data = jq.compile(jq_query).input(raw_data).first() # 输出格式化后的结果 print(json.dumps(processed_data, indent=2))jsonpath-ng:基于JSONPath语法实现数据查询与转换,适合用路径表达式快速定位和提取JSON节点。安装命令:
pip install jsonpath-ngPydantic:适合需要结构化验证+转换的场景,通过定义数据模型来映射JSON结构,自动完成类型转换和数据清洗。安装命令:
pip install pydantic
内容的提问来源于stack exchange,提问作者Aksanth
相关产品推荐
相关产品推荐

