首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我会得到字典键错误

为什么我会得到字典键错误
EN

Stack Overflow用户
提问于 2020-12-29 15:37:15
回答 1查看 68关注 0票数 0

我正在读取一个JSON文件,其中包含嵌套的字典,当获取top tree的值时,数据如下所示。我需要迭代到下面的数据并获取每个元素的信息,比如

代码语言:javascript
复制
{
   "access-policy":[
      {
         "name":"Allow_Redundant_Device",
         "match":{
            "source":{
               "zone":{
                  "zone-list":[
                     "Intf-Internet1-Failover-Zone",
                     "Intf-Internet1-Zone"
                  ]
               },
               "user":{
                  "local-database":{
                     "status":"disabled"
                  },
                  "external-database":{
                     "status":"disabled"
                  },
                  "user-type":"any"
               }
            },
            "destination":{
               "zone":{
                  "zone-list":[
                     "Intf-Internet1-Failover-Zone",
                     "Intf-Internet1-Zone"
                  ]
               }
            }
         },
         "set":{
            "action":"allow",
            "lef":{
               "options":{
                  "send-pcap-data":{
                     "enable":false
                  }
               }
            }
         }
      },
      {
         "name":"Allow_From_Hostbound",
         "match":{
            "source":{
               "zone":{
                  "zone-list":[
                     "HOST-GLOBAL-Zone"
                  ]
               }
            },
            "destination":{
               "zone":{
                  "zone-list":[
                     "Intf-Global-Zone",
                     "ptvi"
                  ]
               }
            }
         },
         "set":{
            "action":"allow"
         }
      },
      {
         "name":"Network_VPN_WEB_TEST",
         "match":{
            "source":{
               "zone":{
                  "zone-list":[
                     "Intf-GLOBAL-Zone"
                  ]
               },
               "address":{
                  "address-list":[
                     "VPN12",
                     "1VPN"
                  ],
                  "address-group-list":[
                     "VPN1"
                  ]
               },
               "user":{
                  "local-database":{
                     "status":"disabled"
                  },
                  "external-database":{
                     "status":"disabled"
                  },
                  "user-type":"any"
               }
            },
            "destination":{
               "zone":{
                  "zone-list":[
                     "L-ST-GLOBAL-Internet1",
                     "L-ST-GLOBAL-Internet2"
                  ]
               }
            },
            "services":{
               "predefined-services-list":[
                  "http",
                  "https"
               ]
            }
         },
         "set":{
            "security-profile":{
               "ips":{
                  "predefined-ips-profile":"Versa Recommended Profile",
                  "predefined-ips-profile-override":"Predefined-alert-IDS"
               },
               "url-filtering":{
                  "user-defined":"EMEA_NETWORK_VPN_WEB"
               }
            },
            "action":"allow",
            "synced-flow":"allow",
            "tcp-session-keepalive":"disabled",
            "lef":{
               "profile":"Default-Logging-Profile",
               "event":"both",
               "options":{
                  "send-pcap-data":{
                     "enable":false
                  }
               }
            }
         }
      },
      {
         "name":"GLOBAL-TO-SDWAN",
         "number":1,
         "match":{
            "source":{
               "zone":{
                  "zone-list":[
                     "Intf-GLOBAL-Zone"
                  ]
               },
               "user":{
                  "local-database":{
                     "status":"disabled"
                  },
                  "external-database":{
                     "status":"disabled"
                  },
                  "user-type":"any"
               }
            },
            "destination":{
               "zone":{
                  "zone-list":[
                     "ptvi"
                  ]
               }
            }
         },
         "set":{
            "action":"allow",
            "synced-flow":"allow",
            "lef":{
               "event":"never",
               "options":{
                  "send-pcap-data":{
                     "enable":false
                  }
               }
            }
         }
      },
      {
         "name":"Allow_From_SDWAN",
         "number":2,
         "match":{
            "source":{
               "zone":{
                  "zone-list":[
                     "ptvi"
                  ]
               },
               "user":{
                  "local-database":{
                     "status":"disabled"
                  },
                  "external-database":{
                     "status":"disabled"
                  },
                  "user-type":"any"
               }
            }
         },
         "set":{
            "action":"allow",
            "synced-flow":"allow",
            "lef":{
               "event":"never",
               "options":{
                  "send-pcap-data":{
                     "enable":false
                  }
               }
            }
         }
      },
      {
         "name":"DENY_MGMT_SERVERS",
         "description":"CHGxxxx",
         "match":{
            "source":{
               "zone":{
                  "zone-list":[
                     "Intf-GLOBAL-Zone"
                  ]
               },
               "address":{
                  "address-group-list":[
                     "AD_MGMT_SERVERS"
                  ]
               },
               "user":{
                  "local-database":{
                     "status":"disabled"
                  },
                  "external-database":{
                     "status":"disabled"
                  },
                  "user-type":"any"
               }
            },
            "destination":{
               "zone":{
                  "zone-list":[
                     "L-ST-GLOBAL-Internet1",
                     "L-ST-GLOBAL-Internet2"
                  ]
               }
            }
         },
         "set":{
            "action":"deny",
            "tcp-session-keepalive":"disabled",
            "lef":{
               "event":"never",
               "options":{
                  "send-pcap-data":{
                     "enable":false
                  }
               }
            }
         }
      },
      {
         "name":"DMZ-APPS-FILTERING",
         "match":{
            "source":{
               "zone":{
                  "zone-list":[
                     "Intf-GUEST-Zone"
                  ]
               },
               "address":{
                  "address-list":[
                     "1NETS",
                     "2NETS"
                  ],
                  "address-group-list":[
                     "1GUEST",
                     "2GROUP"
                  ]
               },
               "user":{
                  "local-database":{
                     "status":"disabled"
                  },
                  "external-database":{
                     "status":"disabled"
                  },
                  "user-type":"any"
               }
            },
            "destination":{
               "zone":{
                  "zone-list":[
                     "L-ST-GUEST-Internet1",
                     "L-ST-GUEST-Internet2"
                  ]
               }
            },
            "application":{
               "filter-list":[
                  "Malware_With_High_Risk"
               ]
            }
         },
         "set":{
            "action":"deny",
            "synced-flow":"allow",
            "tcp-session-keepalive":"disabled",
            "lef":{
               "event":"never",
               "options":{
                  "send-pcap-data":{
                     "enable":false
                  }
               }
            }
         }
      },
      {
         "name":"URL-FILTERING",
         "match":{
            "source":{
               "zone":{
                  "zone-list":[
                     "Intf-GUEST-Zone"
                  ]
               },
               "address":{
                  "address-list":[
                     "2-NETS",
                     "1-NETS"
                  ],
                  "address-group-list":[
                     "1GROUP",
                     "2GROUP"
                  ]
               },
               "user":{
                  "local-database":{
                     "status":"disabled"
                  },
                  "external-database":{
                     "status":"disabled"
                  },
                  "user-type":"any"
               }
            },
            "destination":{
               "zone":{
                  "zone-list":[
                     "L-ST-GUEST-Internet1",
                     "L-ST-GUEST-Internet2"
                  ]
               }
            },
            "url-category":{
               "predefined":[
                  "adult_and_pornography",
                  "confirmed_spam_sources",
                  "dead_sites",
                  "gross",
                  "hacking",
                  "malware_sites",
                  "nudity",
                  "open_http_proxies",
                  "peer_to_peer",
                  "phishing_and_other_frauds",
                  "proxy_avoid_and_anonymizers",
                  "spam_urls",
                  "spyware_and_adware"
               ]
            }
         },
         "set":{
            "action":"deny",
            "synced-flow":"allow",
            "tcp-session-keepalive":"disabled",
            "lef":{
               "event":"never",
               "options":{
                  "send-pcap-data":{
                     "enable":false
                  }
               }
            }
         }
      },
      {
         "name":"PUBLIC-DNS",
         "match":{
            "source":{
               "zone":{
                  "zone-list":[
                     "Intf-GUEST-Zone"
                  ]
               },
               "address":{
                  "address-list":[
                     "1-NETS",
                     "2-NETS"
                  ],
                  "address-group-list":[
                     "2-GUEST",
                     "3-GROUP"
                  ]
               },
               "user":{
                  "local-database":{
                     "status":"disabled"
                  },
                  "external-database":{
                     "status":"disabled"
                  },
                  "user-type":"any"
               }
            },
            "destination":{
               "zone":{
                  "zone-list":[
                     "L-ST-GUEST-Internet1",
                     "L-ST-GUEST-Internet2"
                  ]
               },
               "address":{
                  "address-list":[
                     "dns-google",
                     "dns-google1"
                  ]
               }
            },
            "services":{
               "services-list":[
                  "dns"
               ]
            }
         },
         "set":{
            "action":"allow",
            "synced-flow":"allow",
            "tcp-session-keepalive":"disabled",
            "lef":{
               "event":"never",
               "options":{
                  "send-pcap-data":{
                     "enable":false
                  }
               }
            }
         }
      }
   ]
}

除此之外,为了获取键源和目标的信息,我在key=source的键值下面提取了这些信息。

例如,当我试图获取数据时,

代码语言:javascript
复制
data_src = {'zone': 
               {'zone-list': ['Intf-GLOBAL-Zone']
               }, 
                'address': 
                   {'address-list': ['Netowkr1', 'Netowkr1'], 'address-group-list': ['SOMEDATA']
                   }, 
                    'user': 
                       {'local-database': {'status': 'disabled'}, 
                        'external-database': {'status': 'disabled'}, 
                        'user-type': 'any'
                       }
                    }

data_src' zone‘-->这给了我正确的区域列表

data_src‘’address‘这没有给我任何键值,并抛出

代码语言:javascript
复制
address_list = policy_source['address']['address-list']

KeyError:'address‘

我被困在这里快一天了。你能告诉我怎样才能纠正这个错误吗?

我有一个很大的文件,我需要提取下面字段的数据到excel中,用于json文件中的每个行数据。

对于行的每一次迭代,我需要提取以下数据

Out of source : key

‘'name’‘描述’zone-list‘地址:

源之外:键'name‘'description’zone-list‘address

然后是其余的数据

‘'services’'set‘'action’'lef‘

如果还需要什么,请告诉我。

现在,在为这个函数定义一个函数模式之前,我尝试阅读每个字典来制定代码

代码语言:javascript
复制
import json
import csv

with open("rule.json") as access_json:
    read_content = json.load(access_json)
    read_index = read_content['access-policy']

    for policy_data in read_index:

        policy_name = policy_data['name']
        policy_elements = policy_data['match']

        policy_source = policy_data['match']['source']

        print(policy_source)

        print(policy_source['zone']['zone-list'])  #This works fine

        #below doesnt work as this should be the next key value
        print(policy_source['address']['address-list'])
EN

回答 1

Stack Overflow用户

发布于 2020-12-29 21:18:27

我所理解的是你想要有“地址列表”。您必须在嵌套的json中进行多次解析。loads中的s代表字符串,所以解析这么长时间直到你得到它为止。您可以使用以下命令:

代码语言:javascript
复制
x = json.dumps(data_src)
t = json.dumps(json.loads(x).get("address","{}"))
json.loads(t).get("address-list")

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65488838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档