如何修改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
相关产品推荐
相关产品推荐

