修改 JSON 值
modifying JSON value
我正在尝试修改 JSON 文件中的值,我尝试了以下代码,但它没有改变任何东西,所以我不确定我做错了什么...
def file_filtering(file):
with open(file, 'r') as f:
data = json.load(f)
f.close()
for elem in data['features']:
elem = elem[:-1]
with open(file, 'w') as f:
json.dump(data, f, indent=4, separators=(',', ': '), sort_keys=False)
f.close()
我试图通过简单地删除最后一个字符“/”来更改 URL,而不删除 URL 下的值。
"features": {
"https://services.runescape.com-ow.top/weblogin/loginForm/": {
"activex_count": 0,
"addeventlistener_count": 0,
"alert_count": 0,
}
}
您遇到的问题是 elem = elem[:-1]
只是更改了 elem
变量,并没有真正更改字典的键。
一般来说,就地更改字典中的键是很困难的...完全创建一个新字典要容易得多。您可以使用 dict comprehension,例如:
{key[:-1]: value for key, value in data['features'].items()}
您可以将 JSON 数据替换为:
data['features'] = {
key[:-1]: value
for key, value in data['features'].items()}
你可以做得稍微好一些,而不是砍掉键的最后一个字符,你可以使用 rstrip()
:
明确地去掉它末尾的斜杠
data['features'] = {
key.rstrip('/'): value
for key, value in data['features'].items()}
综合起来:
with open(file, 'r') as f:
data = json.load(f)
data['features'] = {
key.rstrip('/'): value
for key, value in data['features'].items()}
with open(file, 'w') as f:
json.dump(data, f, indent=4, separators=(',', ': '), sort_keys=False)
请注意,您无需显式调用 f.close()
,在上下文管理器中打开文件(如 with
语句所做的那样)会在您离开后自动关闭它。
我正在尝试修改 JSON 文件中的值,我尝试了以下代码,但它没有改变任何东西,所以我不确定我做错了什么...
def file_filtering(file):
with open(file, 'r') as f:
data = json.load(f)
f.close()
for elem in data['features']:
elem = elem[:-1]
with open(file, 'w') as f:
json.dump(data, f, indent=4, separators=(',', ': '), sort_keys=False)
f.close()
我试图通过简单地删除最后一个字符“/”来更改 URL,而不删除 URL 下的值。
"features": {
"https://services.runescape.com-ow.top/weblogin/loginForm/": {
"activex_count": 0,
"addeventlistener_count": 0,
"alert_count": 0,
}
}
您遇到的问题是 elem = elem[:-1]
只是更改了 elem
变量,并没有真正更改字典的键。
一般来说,就地更改字典中的键是很困难的...完全创建一个新字典要容易得多。您可以使用 dict comprehension,例如:
{key[:-1]: value for key, value in data['features'].items()}
您可以将 JSON 数据替换为:
data['features'] = {
key[:-1]: value
for key, value in data['features'].items()}
你可以做得稍微好一些,而不是砍掉键的最后一个字符,你可以使用 rstrip()
:
data['features'] = {
key.rstrip('/'): value
for key, value in data['features'].items()}
综合起来:
with open(file, 'r') as f:
data = json.load(f)
data['features'] = {
key.rstrip('/'): value
for key, value in data['features'].items()}
with open(file, 'w') as f:
json.dump(data, f, indent=4, separators=(',', ': '), sort_keys=False)
请注意,您无需显式调用 f.close()
,在上下文管理器中打开文件(如 with
语句所做的那样)会在您离开后自动关闭它。