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

如何使用jq递归将JSON所有属性名首字母转为大写?

递归将JSON所有属性名首字母转为大写的jq实现

直接用递归函数就能搞定全层级的属性名转换,以下是完整的jq命令:

jq 'def capitalize_key:
    if type == "object" then
        to_entries | map(
            .key = (.key[0:1] | ascii_upcase) + .key[1:] |
            .value |= capitalize_key
        ) | from_entries
    elif type == "array" then
        map(capitalize_key)
    else
        .
    end;
capitalize_key' x.json

命令拆解

  • 先定义了一个叫capitalize_key的递归函数,根据JSON值的类型做不同处理:
    • 对象类型:
      1. to_entries把对象转成键值对数组(比如{"a":1}变成[{"key":"a","value":1}])
      2. 遍历每个键值对:把键的首字母转大写,同时递归处理值(如果值是嵌套对象或数组,会继续深入处理)
      3. from_entries把处理后的键值对数组转回对象
    • 数组类型:对数组里的每个元素递归调用函数,确保数组里的嵌套对象也能被处理,普通元素(比如字符串、数字)直接保留
    • 其他类型(字符串、数字、布尔、null):直接返回原值,不做修改

验证示例

用你提供的输入测试:
输入JSON:

{
  "field1": "v1",
  "field2": {
    "subfield1": "sv1"
  },
  "field3": ["av1", "av2"]
}

执行命令后输出:

{
  "Field1": "v1",
  "Field2": {
    "Subfield1": "sv1"
  },
  "Field3": ["av1", "av2"]
}

完全符合你的期望,哪怕是更深层级的嵌套对象也能处理。

对比你原来的命令

你之前的命令只处理了第一层属性,而这个递归函数会自动遍历所有嵌套的对象,不用手动处理每一层,更简洁通用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 17:20:11