尝试解析 JSON 文件时出现上述错误。
代码:
import json
data = open('output.json').read()
for host in data['ASSET_DATA_REPORT']['HOST_LIST']['HOST']:
print(host['IMAGE_ID'])
追溯:
Traceback (most recent call last):
File "json_format.py", line 11, in <module>
for host in data['ASSET_DATA_REPORT']['HOST_LIST']['HOST']:
TypeError: string indices must be integers, not str
JSON:
{
"ASSET_DATA_REPORT": {
"HOST_LIST": {
"HOST": [
{
"IP": {
"network_id": "0"
},
"TRACKING_METHOD": "EC2",
"ASSET_TAGS": {
"ASSET_TAG": [
"EC2 Running",
"IF - Database - MySQL",
]
},
"DNS": "i-xxxxxxx",
"EC2_INSTANCE_ID": "i-xxxxxx",
"EC2_INFO": {
"PUBLIC_DNS_NAME": "ec2-xxxxxxxx.amazonaws.com",
"IMAGE_ID": "ami-xxxxxx",
"VPC_ID": "vpc-xxxxxx",
"INSTANCE_STATE": "RUNNING",
"PRIVATE_DNS_NAME": "ip-xxxx.ec2.internal",
"INSTANCE_TYPE": "m3.xlarge"
}
}
]
}
}
}
host
由于某种原因,它似乎是一个字符串,我不知道如何克服这个错误。
你有几个问题,一些在你的代码中,一些在你的 JSON 中。
首先,JSON --- 在最后一个列表条目后有一个额外的逗号:
"ASSET_TAG": [
"EC2 Running",
"IF - Database - MySQL",
]
您的代码有两个问题。首先是你永远不会将文件的内容转换为 JSON ---它仍然是一个字符串:
data = open('output.json').read()
你想要像roganjosh 已经描述过的东西:
with open('output.json') as f:
data = json.load(f)
您的后续问题是 JSON 的结构与您的代码不匹配。'IMAGE_ID'
不是存储在'HOST'
列表中的(未命名)字典中的键——它是'EC2_INFO'
字典的键,它包含在那个无名字典中。这:
print(host['IMAGE_ID'])
应该是这样的:
print(host['EC2_INFO']['IMAGE_ID'])
输出是一个字符串:
ami-xxxxxx
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句