修改 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 语句所做的那样)会在您离开后自动关闭它。