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

如何修改JSON中列表类型的CoworkersId字段值(含Id、SummaryId)

扩展Python代码实现JSON多字段ID替换(含列表型字段)

你需要扩展现有代码,让它同时处理CoworkersId这个列表类型的字段,确保相同的旧ID被替换为同一个新ID。利用现有Cache类的缓存机制就能实现这个需求,只需在循环中添加对CoworkersId的处理逻辑即可。

修改后的完整代码如下:

import json
import random

class Cache:
    # 记录已处理过的旧ID与新ID的映射
    key_cache = {}

    @classmethod
    def generate_replacement_key(cls, key: str) -> str:
        """
        如果旧ID已处理过,返回缓存的新ID;否则生成新ID并缓存映射关系
        """
        new_key = cls.key_cache.setdefault(key, cls.generate_random_key())
        return new_key
    
    @classmethod
    def generate_random_key(cls) -> str:
        """
        生成唯一的随机新ID
        """
        new_key = str(random.randint(1000, 1000000))
        if new_key in cls.key_cache.values():
            return cls.generate_random_key()
        return new_key
        
a = '''
{
    "people": [
        {
            "Name": "Jan",
            "Lastname": "Szewc",
            "Id": "a4555752s"
        },
        {
            "Name": "Marek",
            "Lastname": "Piorun",
            "Id": "a4asa85",
            "SummaryId": "a4555752s"
        },
        {
            "Name": "Mikolaj",
            "Lastname": "Ciekasz",
            "Id": "a4ddd244",
            "ManagerId": "a4555752s",
            "CoworkersId":
            [   "1278978",
                "a4555752s"]
        }
]}
'''
data = json.loads(a)


for people in data["people"]:
    # 处理Id字段
    if (id_string := people.get("Id")):
        people["Id"] = Cache.generate_replacement_key(id_string)
    # 处理SummaryId字段
    if (summary_id_string := people.get("SummaryId")):
        people["SummaryId"] = Cache.generate_replacement_key(summary_id_string)
    # 处理CoworkersId列表字段
    if (coworkers_ids := people.get("CoworkersId")):
        # 遍历列表中的每个旧ID,替换为对应的新ID
        people["CoworkersId"] = [
            Cache.generate_replacement_key(old_id) 
            for old_id in coworkers_ids
        ]

print(json.dumps(data, indent=2))

关键改动说明:

  • 添加了对CoworkersId字段的判断:用people.get("CoworkersId")避免键不存在的报错
  • 对列表中的每个旧ID,调用Cache.generate_replacement_key()生成新ID——因为Cache.key_cache会保留旧ID到新ID的映射,所以像a4555752s这类重复出现的旧ID,会被替换为同一个新ID
  • 用列表推导式简洁地完成列表元素的批量替换

这样修改后,三个字段的旧ID都会被正确替换,且相同旧ID对应唯一新ID的要求也能满足。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 20:27:05