2016-01-17 3 views
0

У меня есть объект json, который я хотел бы отфильтровать для имени ключа с ошибкой. Итак, для примера ниже, я хотел бы иметь json-объект без ключа с ошибкой с тестовым именем. Каков самый простой способ сделать это?python - Фильтр JSON для нового объекта JSON

json_data = """{ 
    "my_test": [{ 
     "group_name": "group-A", 
     "results": [{ 
      "test_name": "test1", 
      "time": "8.556", 
      "status": "pass" 
     }, { 
      "test_name": "test2", 
      "time": "45.909", 
      "status": "pass" 
     }, { 
      "test_nameZASSD": "test3", 
      "time": "9.383", 
      "status": "fail" 
     }] 
    }] 
}""" 

Это онлайн-тест, и похоже, что мне не разрешено использовать jsonSchema.

Пока мой код выглядит следующим образом:

if 'test_suites' in data: 
    for suites in data["test_suites"]: 
     if 'results' in suites and 'suite_name' in suites: 
      for result in suites["results"]: 
       if 'test_name' not in result or 'time' not in result or 'status' not in result:       
        result.clear()       
       else: 
        .... 
     else: 
      print("Check 'suite_name' and/or 'results'") 
else: 
    print("Check 'test_suites'") 

Это вид работ, но result.clear() оставляет пустой {}, который раздражать позже. Что я могу сделать здесь?

ответ

0

Похоже, что ваши данные имеют согласованную схему. Поэтому я бы попытался использовать json schema, чтобы решить вашу проблему. С этим вы можете настроить схему и разрешить объекты с определенными именами ключей.

Если вы просто хотите проверить, если определенный ключ в словаре, и убедитесь, что вы получите только те, которые в соответствии с спецификации вы могли бы сделать что-то вроде этого:

passed = [] 
for item in result: 
    if 'test_name' in item.keys(): 
     passed.append(item) 

Но если у вас есть много разных ключей, которые вам нужно проверить, станет громоздким. Поэтому для больших проектов я бы сказал, что схема json - это путь.

+0

Я рассмотрю это. Прямо сейчас я проверяю json, и если я нахожу что-то не так, я делаю results.clear(). (только для этого последнего набора) Но все же оставляет {} скобки. Как я могу это решить? – tsf144

+0

@ tsf144 Я добавил способ, как вы могли это сделать. – Jonathan

+0

Я добавил свой код до сих пор. Это отчасти становится беспорядочным, но мне не разрешено использовать jsonSchema. – tsf144

Смежные вопросы