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

如何使用JavaScript替换JSON结构中的所有值(含数组对象映射)

实现JSON指定层级值到带索引参数占位符的替换

我来帮你搞定这个需求——看起来你需要保留外层resources数组里的name和type原始值,只替换properties下的所有值,其中对象数组要生成带索引的占位符格式。下面是具体的实现步骤和代码:

需求拆解

  • 对于普通键值对(比如zone: "asia"):替换为{param.keyName},即zone变成{param.zone}
  • 对于对象数组(比如disks数组):每个元素的键值对要生成{param.arrayName[index]_keyName}格式,比如第0个元素的name变成{param.disks0_name}

Python实现代码

import json

def replace_with_params(obj, prefix="param"):
    if isinstance(obj, list):
        # 处理对象数组,遍历每个元素并添加索引
        result = []
        for idx, item in enumerate(obj):
            if isinstance(item, dict):
                processed_item = {}
                for key, val in item.items():
                    # 生成 {prefix.arrayName[idx]_key} 格式的占位符
                    processed_item[key] = f"{{{prefix}.{obj.array_key}{idx}_{key}}}"
                result.append(processed_item)
        return result
    elif isinstance(obj, dict):
        result = {}
        for key, val in obj.items():
            if isinstance(val, list):
                # 给数组标记对应的键名,方便生成占位符时使用
                val.array_key = key
                result[key] = replace_with_params(val, prefix)
            else:
                # 普通值生成 {prefix.key} 格式的占位符
                result[key] = f"{{{prefix}.{key}}}"
        return result

# 你的原始JSON数据
original_json = '''{"resources": [{"name": "prod","type": "local","properties": {"zone": "asia","disks": [{"sizeGb": 3,"diskType": "boot","name": "backup"},{"sizeGb": 4,"diskType": "ssd","name": "cache"}]}}]}'''
data = json.loads(original_json)

# 只处理properties层级的内容(保留外层的name和type)
data['resources'][0]['properties'] = replace_with_params(data['resources'][0]['properties'])

# 输出处理后的JSON
print(json.dumps(data, indent=2))

运行结果

执行代码后,你会得到符合需求的输出(修正了示例里的笔误,第二个磁盘的sizeGb应该是{param.disks1_sizeGb}而不是{param.disks1_zone}):

{
  "resources": [
    {
      "name": "prod",
      "type": "local",
      "properties": {
        "zone": "{param.zone}",
        "disks": [
          {
            "sizeGb": "{param.disks0_sizeGb}",
            "diskType": "{param.disks0_diskType}",
            "name": "{param.disks0_name}"
          },
          {
            "sizeGb": "{param.disks1_sizeGb}",
            "diskType": "{param.disks1_diskType}",
            "name": "{param.disks1_name}"
          }
        ]
      }
    }
  ]
}

扩展说明

如果需要替换整个JSON的所有值(包括外层的name和type),只需要把调用改成:

processed_data = replace_with_params(data)

这样外层的name会变成{param.resources0_name},type变成{param.resources0_type},符合你描述的“所有值替换”规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:58:56