Удалить весь объект JSON, если он содержит указанную фразу (из списка в python) - PullRequest
0 голосов
/ 11 марта 2020

Вывод файла JSON похож на:

{
   "object1": {
      "json_data": "{json data information}",
      "tables_data": "TABLES_DATA"
   },
   "object2": {
      "json_data": {json data information}",
      "tables_data": ""
   }
}

По существу, если для tables_data есть пустая строка, как показано в object2 (например, "tables_data": ""), я хочу весь объект, который нужно удалить, чтобы выходные данные выглядели так:

{
   "object1": {
      "json_data": "{json data information}",
      "tables_data": "TABLES_DATA"
   }
}

Как лучше всего это сделать go? Каждый из этих объектов соответствует отдельному индексу в добавленном мной списке, который называется summary[].

Ответы [ 2 ]

1 голос
/ 11 марта 2020

Для этого вы можете перебрать словарь JSON и проверить значения tables_data, добавив элементы objectX в новый словарь, если их значение tables_data прошло тест:

new_dict = {k: v for k, v in json_dict.items()
            if v.get("tables_data", "") != ""}

Если ваш JSON objectX хранится в списке, как вы говорите, их можно обработать следующим образом, используя понимание списка:

filtered_summary = [object_dict for object_dict in summary
                    if object_dict.get("tables_data", "") != ""]
0 голосов
/ 11 марта 2020

Если у вас нет веских причин поступить иначе, питонский c способ отфильтровать список или дикт (или любой итеративный) состоит не в том, чтобы изменить его на месте, а создать новый отфильтрованный. Для вашего случая это будет выглядеть как

raw_data = YOUR_DICT_HERE_WHEREVER_IT_COMES_FROM
# NB : empty string have a false value in a boolean test
cleaned_data = {k:v for k, v in raw_data.items() if not v["table_data"]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...