Python(DICT) - 使用JSON填充 - 无法在请求中使用变量

时间:2017-02-10 10:26:20

标签: python json dictionary

我想知道你是否可以帮助我处理我目前正在处理的一段代码。我是Python的新手,这是我试图编写的第一个主要脚本之一。

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'

在旁边的注释中,当我手动输入列表编号[y]为1时,代码运行完美。所以它就像我将变量[y]输入到请求中的问题一样。

2 个答案:

答案 0 :(得分:1)

此错误仅表示您没有名为"tagValues"的密钥。如果您的json看起来像这样,那么这将有效。

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

因此,要么您的数据看起来不像这样,要么就是这样,那么就会丢失名为"tagValues"的密钥。

另一件事是告诉数据[“results”] [“items”]是列表还是JSON?

答案 1 :(得分: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

以pythonic方式进行:

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