当我尝试在python脚本中访问此JSON文件的第一项时,为什么会收到KeyError?

时间:2019-07-09 14:43:52

标签: python json dictionary for-loop iteration

我正在尝试遍历JSON配置文件,并一次处理一项服务。我想在这段代码中获取service_name,但是它给了我一个KeyError:0。

我尝试过各种方式来遍历它,但是尝试的每种方法都给了我关键错误。

{
  "my_services": [
    {
      "service_name" : "Exchange Online",
      "region": [
        "NorthCentral",
        "SouthCentral"
      ],
      "firewall": [
        "ABC",
        "DEF"
      ],
      "firewall_ip" : "12.23.34.455",
      "firewall_type" : "cde",
      "endpointURL" : "something.com",
      "parserType" : "parseO365Delta.py"
    },
    {
      "service_name" : "Microsoft 365 Common and Office Online",
      "region": [
        "NorthCentral",
        "SouthCentral"
      ],
      "firewall": [
        "ABC"
      ],
      "firewall_ip" : "98.87.76.655",
      "firewall_type" : "abc",
      "endpointURL" : "alsosomething.com",
      "parserType" : "parseO365Delta.py"
    }
  ]
}
import json
import subprocess

def processService(service):
    for item in service[0].values():
        print(item)

def main():
    with open('config.json', 'r') as config:
        config_list = json.load(config)

    for services in config_list["my_services"]:
        processService(services) 

if __name__ == "__main__":
    main()

2 个答案:

答案 0 :(得分:1)

"my_services"的值是字典列表。

service中的

processService是字典,而不是列表。因此

for item in service[0].values():

应更改为

for item in service.values():

答案 1 :(得分:0)

更新:

我能够通过使用字典方法get来弄清楚它,该方法在字典中给出了一个键,然后返回了相关的值。

我用来获取相关值的代码行是:

def processService(service):
    print(service.get("service_name"))

这将返回我的配置列表中的每个关联的service_name。