下面是一个JSON字符串:第一个月我只想从AUT、RES、RENT和COR的值中删除空格
/"(AUT|COR|RES|SUP)":"((\w*)(\s*)(,*))"/
字符串我的最佳近似,无法获得并清除RES值 “\1”:“\3”2019年10月19日,中国科学院院士、中国科学院有什么想法吗?谢谢
roqulrg31#
使用正则表达式解析结构化数据几乎总是会导致不可靠的行为。相反,你可以创建一个函数,它递归地遍历子字典,并带有一个标志,指示当前键是否在所需键中,以便相应地替换值:
def remove_whitespace(data, keys, replace=False): if isinstance(data, dict): for key, value in data.items(): data[key] = remove_whitespace(value, keys, key in keys) elif replace: data = data.replace(' ', '') return data
字符串以便:
import json data = '{"main":{"sem":"segon semestre","year":"2021","AUT":"admin ","RES":"manel , admin ,lectura ","SUP":"kiloton ","COR":"","fitx":"continguts"}}' keys = ['AUT', 'RES', 'SUP', 'COR'] print(json.dumps(remove_whitespace(json.loads(data), keys)))
型产出:
{"main": {"sem": "segon semestre", "year": "2021", "AUT": "admin", "RES": "manel,admin,lectura", "SUP": "kiloton", "COR": "", "fitx": "continguts"}}
型演示:https://ideone.com/Br4rBw
idfiyjo82#
使用 json.loads 函数将JSON字符串转换为Python字典。然后只需重新选择相关的键并适当地调整它们的值
from json import loads, dumps JS = """{"main":{"sem":"segon semestre","year":"2021","AUT":"admin ","RES":"manel , admin ,lectura ","SUP":"kiloton ","COR":" ","fitx":"continguts"}}""" m = (d := loads(JS))["main"] for key in "AUT", "RES", "SUP", "COR": m[key] = m[key].replace(" ", "") print(dumps(d, indent=2))
字符串
输出:
{ "main": { "sem": "segon semestre", "year": "2021", "AUT": "admin", "RES": "manel,admin,lectura", "SUP": "kiloton", "COR": "", "fitx": "continguts" } }
型
备注:
这个问题似乎要求一个递归的解决方案,但我不知道为什么这是必要的
2条答案
按热度按时间roqulrg31#
使用正则表达式解析结构化数据几乎总是会导致不可靠的行为。
相反,你可以创建一个函数,它递归地遍历子字典,并带有一个标志,指示当前键是否在所需键中,以便相应地替换值:
字符串
以便:
型
产出:
型
演示:https://ideone.com/Br4rBw
idfiyjo82#
使用 json.loads 函数将JSON字符串转换为Python字典。
然后只需重新选择相关的键并适当地调整它们的值
字符串
输出:
型
备注:
这个问题似乎要求一个递归的解决方案,但我不知道为什么这是必要的