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

如何用Jolt转换将嵌套JSON的所有键转为小写?

Jolt转换:将所有JSON键转为小写(含嵌套键)

我有如下JSON输入:

{
  "levelOne": [
    {
      "leveltwo": {
        "levelThree": [
          {
            "type": "typeOne",
            "leveltwo": {
              "Id": "101000094794",
              "Id2": "101000013207"
            }
          },
          {
            "type": "typeTwo",
            "leveltwo": {
              "Id": "101000013207",
              "Id2": "101000013207"
            }
          }
        ]
      }
    }
  ]
}

是否存在对应的Jolt转换规范,可将所有键(包括嵌套对象中的键,如leveltwo下的键)转为小写?目前我使用的Jolt模板如下:

[
  {
    "operation": "shift",
    "spec": {
      "levelOne": {
        "*": {
          "leveltwo": {
            "id": "&3[&2].leveltwo.id",
            "levelThree": {
              "*": {
                "leveltwo": {
                  "Id": "&6[&5].leveltwo.&3[&2].id",
                  "Id2": "&6[&5].leveltwo.&3[&2].id2"
                },
                "type": "&5[&4].leveltwo.&2[&1].type"
              }
            }
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "$": "&1.key",
        "@": "&1.value"
      }
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "levelOne": {
        "key": "=toLower"
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "value": "@(1,key)"
      }
    }
  }
]

期望得到的结果是所有键(包括levelThree、typeOne、typeTwo)均为小写:

{
  "levelone": [
    {
      "leveltwo": {
        "levelthree": [
          {
            "id": "101000094794",
            "id2": "101000013207",
            "type": "typeone"
          },
          {
            "id": "101000013207",
            "id2": "101000013207",
            "type": "typetwo"
          }
        ]
      }
    }
  ]
}

解决方案

可以通过递归遍历+键名转小写的方式实现,无需逐个指定键名。以下是完整的Jolt转换规范:

[
  // 第一步:递归拆解所有键值对,分离键与值
  {
    "operation": "shift",
    "spec": {
      "*": {
        // 处理数组元素
        "*": {
          "$": "&2[&1].key",
          "@": "&2[&1].value",
          // 递归处理嵌套对象
          "*": {
            "$": "&3[&2].&1.key",
            "@": "&3[&2].&1.value",
            "*": {
              "$": "&4[&3].&2.&1.key",
              "@": "&4[&3].&2.&1.value",
              "*": {
                "$": "&5[&4].&3.&2.&1.key",
                "@": "&5[&4].&3.&2.&1.value"
              }
            }
          }
        },
        // 处理顶层对象键值
        "$": "&1.key",
        "@": "&1.value",
        "*": {
          "$": "&2.&1.key",
          "@": "&2.&1.value",
          "*": {
            "$": "&3.&2.&1.key",
            "@": "&3.&2.&1.value"
          }
        }
      }
    }
  },
  // 第二步:将所有key字段转为小写
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "*": {
        "*": {
          "key": "=toLower",
          "*": {
            "key": "=toLower",
            "*": {
              "key": "=toLower",
              "*": {
                "key": "=toLower"
              }
            }
          }
        },
        "key": "=toLower",
        "*": {
          "key": "=toLower",
          "*": {
            "key": "=toLower"
          }
        }
      }
    }
  },
  // 第三步:用小写后的key重组JSON结构
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": {
          "value": "@(1,key)",
          "*": {
            "value": "@(2,key).@(1,key)",
            "*": {
              "value": "@(3,key).@(2,key).@(1,key)",
              "*": {
                "value": "@(4,key).@(3,key).@(2,key).@(1,key)"
              }
            }
          }
        },
        "value": "@(1,key)",
        "*": {
          "value": "@(2,key).@(1,key)",
          "*": {
            "value": "@(3,key).@(2,key).@(1,key)"
          }
        }
      }
    }
  },
  // 第四步:将type字段的取值转为小写
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "*": {
        "*": {
          "*": {
            "*": {
              "type": "=toLower"
            }
          }
        }
      }
    }
  }
]

说明:

  1. 递归拆解:通过多层shift操作,把每个嵌套层级的键和值拆分开,为修改键名做准备。
  2. 键名转小写:借助modify-overwrite-beta和=toLower函数,批量将所有key字段转为小写。
  3. 重组结构:再次使用shift操作,用小写后的键名重新组装JSON,恢复原有的层级关系。
  4. 字段值转小写:单独处理type字段的取值,转为小写以匹配期望输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 05:07:50