В настоящее время я получаю очень длинный JSON и пытаюсь извлечь из него 2 фрагмента информации через Python 2.7.

JSON выглядит примерно так:

{
  'device': [
    {
      'serial': '00000000762c1d3c',
      'registered_id': '019'
    },
    {
      'serial': '000000003ad192f2',
      'registered_id': '045'
    },
    {
      'serial': '000000004c9898aa',
      'registered_id': '027'
    }
  ],
}

В этом JSON я ищу конкретный сериал, который может совпадать с одним в JSON. Если это так, он должен также распечатать зарегистрированный_идентификатор.

Я пытался использовать простой скрипт, даже без зарегистрированного_идентификатора, но ничего не получилось.

if '00000000762c1d3c' not in data['device']:
        print 'not there'
else:
        print 'there'

Спасибо за ваши предложения!

11
user5740843 8 Янв 2017 в 18:15

3 ответа

Лучший ответ

date['device'] содержит список объектов, поэтому вы должны обращаться с ним как таковым и перебирать их:

for element in data['device']:
    if element['serial'] == '00000000762c1d3c':
        print 'there'
        print element['registered_id']
        break
else:
    print 'not there'

Это использует как-то менее известную конструкцию for-else: https://docs.python.org/3/tutorial/controlflow.html#break-and-continue-statements-and-else-clauses-on-loops

6
DeepSpace 8 Янв 2017 в 15:26

Во-первых, ваш вклад не JSON. Json использует двойные кавычки. Но предположим, что вы успешно загрузили его с помощью json, теперь это словарь под названием d.

Затем вы можете отсканировать все поддикты d и проверить ключ serial на соответствие вашему значению, останавливаясь при обнаружении с использованием any и понимания генератора:

print(any(sd['serial']=='00000000762c1d3c' for sd in d['device']))

Возвращает True, если серийный номер найден False в противном случае.

7
Jean-François Fabre 8 Янв 2017 в 15:18

Может быть, это поможет вам:

if [x for x in data['device'] if x.get('serial')=='00000000762c1d3c']:
  print "IN"
else:
  print "NOT"

Python: понимание списков можно использовать для создания списков в очень естественном, простом Кстати, как математик привык делать.

0
Devansh 8 Янв 2017 в 15:35