2017-02-10 3 views
1

Мне было интересно, можете ли вы помочь мне с куском кода, над которым я сейчас работаю. Я новичок в Python, и это один из первых основных сценариев, которые я пытался написать.Python (DICT) - Заселен JSON - Невозможно использовать переменную в запросе

import json, sys 
from pprint import pprint 
#Importing workbench json output into the python script. 
with open('jsonoutput.json') as data_file: 
    data = json.load(data_file) 

#Sets the verible for the while loop. 
x = int(0) 

while x <= 1: 
    y = x 
    print type(data) 
    jdata = data["result"]["items"][y]["tagValues"]["IdDevicesMap"]["value"] 
    if setup_1(jdata) == True: 
     Default_1 += 1 
    else: 
     print "exiting" 

Я получаю ошибку при запуске:

Traceback (most recent call last): 
    File "main.py", line 47, in <module> 
    jdata = data["result"]["items"][y]["tagValues"]["IdDevicesMap"]["value"] 
KeyError: 'tagValues' 

Только на стороне записки, а также, когда я вручную поместить в число списка [у] 1 код работает отлично. Так что это похоже на то, что у него возникла проблема с тем, как я ввожу переменную [y] в запрос.

+0

Похож tagValues ​​не в некоторых из вложенных словарей вы считанные из файла. Ум, чтобы обеспечить ввод? –

ответ

1

Я уверен, что json, который вы прочитали, не имеет tagValues ​​в каждом из них. Вы могли бы хотеть попробовать try: и except:

import json, sys 
from pprint import pprint 
#Importing workbench json output into the python script. 
with open('jsonoutput.json') as data_file: 
    data = json.load(data_file) 
x = 0 
while True: 
    try: 
     jdata = data["result"]["items"][x]["tagValues"]["IdDevicesMap"]["value"] 
     if setup_1(jdata) == True: 
      Default_1 += 1 
     else: 
      print "exiting" 
      break 
    except KeyError: 
     print data["result"]["items"][x] 
     pass 
    x+=1 

Чтобы сделать это в вещих образом:

import json, sys 
from pprint import pprint 
#Importing workbench json output into the python script. 
with open('jsonoutput.json') as data_file: 
    data = json.load(data_file) 

for x, d in enumerate(data["result"]["items"]): #in case you need a counter 
    try: 
     jdata = d["tagValues"]["IdDevicesMap"]["value"] 
     if setup_1(jdata) == True: 
      Default_1 += 1 
     else: 
      print "exiting" 
      break 
    except KeyError: 
     pass 
+0

Ahh awesome, это именно то, что происходило, по какой-то причине я автоматически предполагал, что для каждого устройства было tagValue, что было неверно. Изменен мой код для обработки этого исключения, и он работал отлично. –

1

Эта ошибка просто означает, что у вас нет ключа под названием "tagValues". Это будет работать, если ваш json выглядит так.

data = {"result": 
     {"items": 
      [ {"tagValues": 
       {"IdDevicesMap": 
        {"value": 
        { 
         #data 
        } 
        } 
       } 
       } 
      ] 
     } 
     } 

Таким образом, либо ваши данные не выглядеть так, или если это произойдет, то ключ называется "tagValues" отсутствует.

Другое дело, если данные ["results"] ["items"] списка или JSON?

+0

ой. Благодарю. починю. – Pbd

+0

еще раз спасибо. уф. – Pbd

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