首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何删除python中的特定json值?

如何删除python中的特定json值?
EN

Stack Overflow用户
提问于 2022-05-17 19:16:04
回答 1查看 39关注 0票数 0

我正在制作一个播放列表网站,可以创建、显示和删除播放列表和歌曲。我使用一个JSON文件来存储数据。唯一不起作用的功能是删除歌曲功能。

这是我的JSON文件

代码语言:javascript
复制
"Playlists": [
    {
        "ID": 1,
        "Name": "Car Boosted",
        "Songs": [
            {
                "Name": "Dusk Till Dawn",
                "Artist": "Sia",
                "Link": "https://www.youtube.com/watch?v=6ADdqsvlqtU"
            },
            {
                "Name": "Blinding Lights",
                "Artist": "The Weekend",
                "Link": "https://www.youtube.com/watch?v=4NRXx6U8ABQ"
            }
        ],
        "Date": "16 / 03 / 2022"
    },
    {
        "ID": 2,
        "Name": "Workout Playlists",
        "Songs": [
            {
                "Name": "Dusk Till Dawn",
                "Artist": "Sia",
                "Link": "https://www.youtube.com/watch?v=6ADdqsvlqtU"
            },
            {
                "Name": "Blinding Lights",
                "Artist": "The Weekend",
                "Link": "https://www.youtube.com/watch?v=4NRXx6U8ABQ"
            },
            {
                "Name": "Till I Collapes",
                "Artist": "Eminem",
                "Link": "https://www.youtube.com/watch?v=Obim8BYGnOE"
            },
            {
                "Name": "Lose Yourself",
                "Artist": "Eminem",
                "Link": "https://www.youtube.com/watch?v=_Yhyp-_hX2s"
            }
        ],
        "Date": "25 / 04 / 2022"
    }
]

我使用播放列表的ID和歌曲的索引来找到它在列表中的位置,并使用它来删除它。这是我的"deleteSong“函数:

代码语言:javascript
复制
def deleteSongFromJson(songID, pid):
"""deletes Songs Form Playlist

Args:
        songID (int): ID Of Song
        id (itn): ID Of Playlist
"""
pid = int(pid)
songID = int(songID)
with open('databse.json','r+') as file:
    data = json.load(file)
    playlists = data['Playlists']
    for playlist in playlists:
     if playlist['ID'] == id:
         songs = playlist["Songs"]
         del songs[songID]
         file.seek(0)
         json.dump(data, file, indent = 4)

当我运行这个函数时,它会从右边的播放列表中删除歌曲,但是会粘贴列表的最后一部分,然后粘贴到JSON文件的底部。

例如。

代码语言:javascript
复制
                "Name": "Blinding Lights",
                "Artist": "The Weekend",
                "Link": "https://www.youtube.com/watch?v=4NRXx6U8ABQ"
            }
        ],
        "Date": "17 / 05 / 2022"
    }
]
    "Artist": "The Weekend",
                "Link": "https://www.youtube.com/watch?v=4NRXx6U8ABQ"
            }
        ],
        "Date": "17 / 05 / 2022"
    }
]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-17 20:10:57

我认为您的问题是尝试一次读取和写入文件,这可能会导致奇怪的光标问题。

尝试重构您的代码,以便有两个独立的open语句,如下所示(未经测试):

代码语言:javascript
复制
def deleteSongFromJson(songID, pid):
    """deletes Songs from Playlist

    Args:
        songID (int): ID Of Song
        id (itn): ID Of Playlist
    """
    pid = int(pid)
    songID = int(songID)

    with open('databse.json','r') as file:
        data = json.load(file)

    for playlist in data['Playlists']:
        if playlist['ID'] == id:
            del playlist["Songs"][songID]

    with open('databse.json','w') as file:
        json.dump(data, file, indent=4)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72279553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档