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

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-ng

  • Pydantic:适合需要结构化验证+转换的场景,通过定义数据模型来映射JSON结构,自动完成类型转换和数据清洗。安装命令:pip install pydantic

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 01:30:30