修改JSON值

问题描述 投票:1回答:1

[我正在尝试修改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,
        }
}
python json python-3.x str-replace
1个回答
2
投票

您遇到的问题是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语句一样)将在您离开文件后自动将其关闭。

© www.soinside.com 2019 - 2024. All rights reserved.