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

如何使用jq递归转换任意JSON文件为指定结构?

用JQ递归转换JSON为指定结构

完全可以用JQ实现这个需求,核心思路是通过递归函数遍历JSON的每一层结构,将键值对转换为你需要的{name, type, value}格式,同时处理嵌套的对象和数组。

核心JQ脚本

def transform:
  if type == "object" then
    to_entries | map({
      name: .key,
      type: (.value | type),
      value: (.value | transform)
    })
  elif type == "array" then
    map(transform)
  else
    .
  end;

transform

脚本说明

  • 递归函数transform:负责处理不同类型的JSON值:
    • 当值为object类型时,先用to_entries将对象转为{key, value}的条目数组,再映射为目标格式,其中value字段会递归调用transform处理嵌套对象。
    • 当值为array类型时,对数组中的每个元素递归执行transform,保持数组结构的同时处理内部嵌套。
    • 对于字符串、数字、布尔值、null等基础类型,直接返回原值作为value字段。

示例用法

假设你有如下输入JSON文件input.json:

{
  "name": "Alice",
  "age": 30,
  "active": true,
  "address": {
    "street": "Main St",
    "zip": 12345
  },
  "hobbies": ["reading", {"type": "outdoor", "frequency": "weekly"}]
}

运行命令(将脚本保存为transform.jq后执行):

jq -f transform.jq input.json

输出结果

[
  {
    "name": "name",
    "type": "string",
    "value": "Alice"
  },
  {
    "name": "age",
    "type": "number",
    "value": 30
  },
  {
    "name": "active",
    "type": "boolean",
    "value": true
  },
  {
    "name": "address",
    "type": "object",
    "value": [
      {
        "name": "street",
        "type": "string",
        "value": "Main St"
      },
      {
        "name": "zip",
        "type": "number",
        "value": 12345
      }
    ]
  },
  {
    "name": "hobbies",
    "type": "array",
    "value": [
      "reading",
      [
        {
          "name": "type",
          "type": "string",
          "value": "outdoor"
        },
        {
          "name": "frequency",
          "type": "string",
          "value": "weekly"
        }
      ]
    ]
  }
]

自定义调整

如果需要将数组中的基础类型也转换为{name, type, value}格式(比如数组元素没有键名,可设name为索引或固定值),可以修改数组分支的逻辑,例如:

elif type == "array" then
  map(
    if type == "object" or type == "array" then transform
    else {name: null, type: type, value: .} end
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 01:57:29