Python 解析这个嵌套的json?

Python 解析这个嵌套的json?,python,json,nested,nmap,Python,Json,Nested,Nmap,我试图解析从xml转换为json的nmap扫描结果。我很难提取的json部分如下: “端口”:{ “端口”:{ “@portid”:“22”, “国家”:{ “@state”:“打开”, }, “服务”:{ “@product”:“OpenSSH”, }, “脚本”:[ { “@output”:“\n ssh dss AAAArO379Amw==\n ssh rsa AAAAB3nSb3vZeQAw==”, “@id”:“ssh主机密钥”, “表格”:[ { “要素”:[ { “@key”:“k

我试图解析从xml转换为json的nmap扫描结果。我很难提取的json部分如下:

“端口”:{
“端口”:{
“@portid”:“22”,
“国家”:{
“@state”:“打开”,
},
“服务”:{
“@product”:“OpenSSH”,
},
“脚本”:[
{
“@output”:“\n ssh dss AAAArO379Amw==\n ssh rsa AAAAB3nSb3vZeQAw==”,
“@id”:“ssh主机密钥”,
“表格”:[
{
“要素”:[
{
“@key”:“key”,
“#尾”:“\n”,
“#文本:”“qfBquizTpHqzFryzNqfBq0JBUHKZQVHAEMI4N1IzrVqNH3ZWLOAJTLZC1AzSMGTVMG1ock8ZNBBxC9PQ=”
},
{
“@key”:“指纹”,
“#尾”:“\n”,
#文本:“4724ad3b5f2”
}
],
“#尾”:“\n”,
“文本”:“\n”
},
{
“要素”:[
{
“@key”:“key”,
“#尾”:“\n”,
“#正文”:“QUFBQUIZTNPHQZF5YZJFQUFBQUJJD0FBQVFFQXJLZTC5CWHLNUJXQ3RPWELLYBDVRBTY0AZI5EHR3USTYNRIM3ZAZVFDZ09”
},
{
“@key”:“指纹”,
“#尾”:“\n”,
#文本:“a015719c9”
}
],
“#尾”:“\n”,
“文本”:“\n”
}
]
}}}
我试图从脚本键中提取部分,我的代码如下所示

if 'script' in extracted_json['ports']['port']:
    for something in extracted_json['ports']['port']['script']['table']:
        print something['elem']
然而,当我运行它时,我会返回错误消息
TypeError:string索引必须是整数
。如果我试图将
print
语句更改为
print something[1]
,那么我会得到以下信息:
keyrerror:1
。我应该如何从这个嵌套的json中提取信息

变量包含以下内容

{
    u '#tail': u '\n', u '#text': u '\n', u 'elem': [{
        u '#tail': u '\n',
        u '@key': u 'key',
        u '#text': u 'QUFBQUIzTnTVaWURiMFNpdz09'
    }, {
        u '#tail': u '\n',
        u '@key': u 'bits',
        u '#text': u '2048'
    }, {
        u '#tail': u '\n',
        u '@key': u 'fingerprint',
        u '#text': u '239d68c0c083446c'
    }, {
        u '#tail': u '\n',
        u '@key': u 'type',
        u '#text': u 'ssh-rsa'
    }]
}

script
包含一个数组,您需要遍历它。而
table
也是一个数组

for script in extracted_json['ports']['port']['script']:
    for table in script['table']:
        print table['elem']

如果我像你建议的那样把它移到外面,那么我就会得到这个错误键:“script”。也许在我的json代码片段中很难看到,因为我去掉了很多东西来缩短示例,但是“script”在ports-port-script下。我认为
script
是一个JSON数组,所以您需要对它进行索引或循环。我在script['table']中为表得到了这个结果:TypeError:但是,当我检查type(script)时,字符串索引必须是整数在第一个for循环中,它返回Ok,我想我发现了一些东西,显然对于一些主机json数据更改,这取决于结果,所以我可能在正确解析它们时犯了一个错误。大多数结果解析正常,但有些结果让我很困惑,比如这个结果使用unicode类型而不是dict。听起来API有时会返回字符串而不是dict一个数组。你需要检查类型,并根据类型进行不同的处理。谢谢你给了我这个想法。深夜的修补显然让我心神不宁:)