Python3中如何通过循环修改类JSON字符串内的指定值
Python3 循环修改嵌套类JSON字符串目标值方案
核心逻辑
你提供的字符串是两层嵌套JSON结构:
- 外层是标准JSON对象,其中
query字段存储了转义后的内层JSON字符串 - 不需要硬编码字段路径,通过递归循环遍历所有层级的键值对,即可自动定位到目标键完成修改,遇到转义的JSON字符串会自动解析进入内层处理,修改完成后自动还原结构。
实现代码
import json def loop_modify_json(obj, target_key, new_val): # 遍历当前层所有键值对 for k, v in obj.items(): # 命中目标键直接更新值 if k == target_key: obj[k] = new_val # 当前值是字典,递归进入下一层遍历 elif isinstance(v, dict): loop_modify_json(v, target_key, new_val) # 当前值是字符串时,尝试解析为内层JSON继续处理 elif isinstance(v, str): try: inner_obj = json.loads(v) if isinstance(inner_obj, dict): loop_modify_json(inner_obj, target_key, new_val) # 内层修改完成后重新序列化为转义字符串,还原原有结构 obj[k] = json.dumps(inner_obj, separators=(',', ':')) except json.JSONDecodeError: # 非JSON格式字符串直接跳过 continue if __name__ == "__main__": # 原始字符串需先去掉高亮标记用的**,还原为合法JSON格式 raw_json_str = '''{"query":"{\"format\":\"article-timeline\",\"from\":0,\"isLiveWirePage\":true,\"section\":\"/markets\",\"sections\":\"/markets\",\"size\":6,\"sort\":\"display_date:desc\",\"types\":\"\"}","d":"176","_website":"coindesk"}''' # 解析外层JSON为字典 data = json.loads(raw_json_str) # 示例:把from字段的值从0修改为100,需要改其他字段直接替换参数即可 loop_modify_json(data, target_key="from", new_val=100) # 转换回最终的JSON字符串 result = json.dumps(data, separators=(',', ':')) print(result)
注意事项
原始样例里
from字段值包裹的**是人工高亮标记,不属于JSON合法语法,正式处理前必须移除,否则会导致JSON解析失败。
该方法支持任意深度的嵌套JSON结构,也支持多层转义JSON字符串的自动解析修改,不需要提前预知字段所在层级。
内容的提问来源于stack exchange,提问作者cristian olivares
相关产品推荐
相关产品推荐

