开发者社区> 问答> 正文

修改JSON值

我正在尝试修改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,
        }
}

问题来源:stackoverflow

展开
收起
is大龙 2020-03-24 19:15:30 714 0
2 条回答
写回答
取消 提交回答
  • 有点尴尬唉 你要寻找的东西已经被吃掉啦!

    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)

    2020-03-25 22:27:29
    赞同 展开评论 打赏
  • 您遇到的问题是elem = elem [:-1]只是在更改elem变量,而没有真正更改字典的键。

    通常,很难从适当的位置更改词典的键...完全创建一个新词典要容易得多。您可以使用dict理解来做到这一点,例如:

    {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语句一样)会在您离开文件后自动将其关闭。

    回答来源:stackoverflow

    2020-03-24 19:15:39
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载