Как удалить ключ и его вложенные пары значений ключа в файле json?

Я хочу иметь возможность проверить, есть ли в файле json ключ верхнего уровня, который я ищу, и удалить этот вложенный словарь.

JSON-файл:

{
    "One": {
        "action": "One",
        "delay": 1559243024.3665395,
        "seconds": 0,
        "score": 0,
        "delta": 1559183024.3665395,
        "grace_sec": 60000
    },
    "Two": {
        "action": "Two",
        "delay": 1559321009.969849,
        "seconds": 0,
        "score": 14,
        "delta": 1559261009.969849,
        "grace_sec": 60000
    },
    "Three": {
        "action": "Three",
        "delay": 1559909745.5981774,
        "seconds": 0,
        "score": 0,
        "delta": 1559309745.5981774,
        "grace_sec": 600000
    },
    "Four": {
        "action": "Four",
        "delay": 1559909757.0363235,
        "seconds": 0,
        "score": 1,
        "delta": 1559309757.0363235,
        "grace_sec": 600000
    }
}

Это то, что я пробовал, но не работал:

if name == child.text:
              ...
                with open("streak.json", "r+") as f:
                    data = json.load(f)

                for x in data:
                    if name in x:
                        del x[name]

                with open("streak.json", "w") as file:
                    data = json.dump(data, file)

Так, например, если имя == "Two", то все пары значений ключа Two будут удалены, включая саму Two.

Итак, вы хотите удалить "Two": { "action": "Two", "delay": 1559321009.969849, "seconds": 0, "score": 14, "delta": 1559261009.969849, "grace_sec": 60000 },?

Devesh Kumar Singh 31.05.2019 15:49

Это не Два, я хочу удалить а любой словарь, который программа говорит == child.text. Я просто использовал Two в качестве примера.

yemi.JUMP 31.05.2019 15:51
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
1 194
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Просто удалите элемент верхнего уровня:

with open("streak.json", "r") as f:
    data = json.load(f)

if name in data:
    del data[name]

with open("streak.json", "w") as file:
    json.dump(data, file)

Извините, я просто скопировал код из ОП.

quamrana 31.05.2019 15:56
Ответ принят как подходящий

Вы можете использовать функцию pop(). Эта функция удалит ключ из словаря и вернет значение. Если ключ не существует, он вернет значение по умолчанию. например:

>>> d = {'a': 1, 'b': 2}
>>> d.pop('a', None)
1
>>> d
{'b': 2}
>>> d.pop('c', None)
>>> d
{'b': 2}
>>>

Это уменьшит нагрузку на проверку существования ключа при удалении, и вам не придется полагаться на KeyError, чтобы проверить, не произошел ли сбой. Вы можете проверить, не является ли возвращаемое значение вашим дозорным значением, None в этом случае ключ был успешно удален. Если это сигнальное значение, то ключ никогда не существовал.

Другие вопросы по теме