Usunięcie itemu z Json file

Usunięcie itemu z Json file
GT
  • Rejestracja:ponad 5 lat
  • Ostatnio:prawie 3 lata
  • Postów:35
0

Cześć, nie moge usunąć obiektu z JSON file. Macie pomysł jak zrobić to poprawnie?

Oto mój kod:
Funkcja

Kopiuj
    def remove_account(username):
        with open('database.json', 'r+') as file:
            data = json.load(file)
            for user in data['USERS']:
                if user['username'] == username:
                    data['USERS'].remove(user)
                    file.seek(0)
                    json.dump(data, file, indent=4)

Bazadanych Json file:

Kopiuj
{
    "USERS": [
        {
            "username": "Pawel",
            "password": "pawel",
            "rights": 1
        },
        {
            "username": "Kuba",
            "password": "kuba",
            "rights": 0
        },
        {
            "username": "Ania",
            "password": "ania",
            "rights": 0
        },
        {
            "username": "dupa1",
            "password": "dupa2",
            "rights": 0
        },
        {
            "username": "nowy",
            "password": "nowy123",
            "rights": 0
        },
        {
            "username": "nowa",
            "password": "nowa123",
            "rights": 0
        }
    ]
}

po użyciu tej funkcji remove_account('nowa') dostaję następującego Jsona

Kopiuj
{
    "USERS": [
        {
            "username": "Pawel",
            "password": "pawel",
            "rights": 1
        },
        {
            "username": "Kuba",
            "password": "kuba",
            "rights": 0
        },
        {
            "username": "Ania",
            "password": "ania",
            "rights": 0
        },
        {
            "username": "dupa1",
            "password": "dupa2",
            "rights": 0
        },
        {
            "username": "nowy",
            "password": "nowy123",
            "rights": 0
        }
    ]
} {
            "username": "nowa",
            "password": "nowa123",
            "rights": 0
        }
    ]
}
edytowany 4x, ostatnio: GoT98wppl
ledi12
  • Rejestracja:prawie 6 lat
  • Ostatnio:około 2 miesiące
  • Lokalizacja:Wrocław
2
Kopiuj
import json
def lol(name):
    with open("blabla.json", "r+") as file:
        base = json.load(file)
        new = ([x for x in base["USERS"] if x["username"] != name])
        base["USERS"] = new
        file.seek(0)
        file.write(json.dumps(base))
        file.truncate()
lol("Pawel")

-> 

{"USERS": [{"username": "Kuba", "password": "kuba", "rights": 0}, {"username": "Ania", "password": "ania", "rights": 0}, {"username": "dupa1", "password": "dupa2", "rights": 0}, {"username": "nowy", "password": "nowy123", "rights": 0}, {"username": "nowa", "password": "nowa123", "rights": 0}]}

file.seek(0) zmienia offset na poczatek wczytanego pliku -> nastepnie nadpisujemy tablice w keyu USERS ->file.truncate() przycina reszte (Obecna pozycja w pliku to koniec nowe tablicy i w tym momencie truncate przycina cala zawartosc zaczynajaca sie od indexu konczacego nowa tablice az po sam koniec pliku.)


Robię http response status cody w martwych ciągach
edytowany 7x, ostatnio: ledi12
GT
trochę spóźniona odpowiedź, ale dziękuję bardzo za pomoc :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.