将Python Json转换为dict
我正在调用一个返回复杂json的API:将Python Json转换为dict,python,Python,我正在调用一个返回复杂json的API: {"results": [{"attrs": {"name": "par.abd","state": 1.0}, "joins": {}, "meta": {}, "name": "par.abd", "type": Host" }, {"attrs": {"name": "bbc.abd",
{"results": [{"attrs": {"name": "par.abd","state": 1.0},
"joins": {},
"meta": {},
"name": "par.abd",
"type": Host"
},
{"attrs": {"name": "bbc.abd","state": 1.0},
"joins": {},
"meta": {},
"name": "bbc.abd",
"type": "Host"
}]}
如何提取属性的名称和状态 使用模块:
请注意,我必须在字符串末尾添加一个缺少的
“
”——我希望它只在您复制到此处时消失。正如@Aran Fey所建议的,您应该使用模块,该模块将JSON字符串转换为Python命令和列表
import json
json_string = '{"results": [{"attrs": {"name": "par.abd","state": 1.0},"joins": {},"meta": {},"name": "par.abd","type": "Host"},{"attrs": {"name": "bbc.abd","state": 1.0},"joins": {},"meta": {},"name": "bbc.abd","type": "Host"} ]}'
data = json.loads(json_string)
for item in data['results']:
attrs = item['attrs']
print(attrs['name'], attrs['state'])
顺便说一句,您的JSON示例中有一个语法错误。在第一次出现“Host”之前缺少一个双引号。与Thierry的答案基本相同。 json无效时也存在同样的问题
import json
text = '''{
"results": [
{
"attrs": {
"name": "par.abd",
"state": 1.0
},
"joins": {
},
"meta": {
},
"name": "par.abd",
"type": "Host"
},
{
"attrs": {
"name": "bbc.abd",
"state": 1.0
},
"joins": {
},
"meta": {
},
"name": "bbc.abd",
"type": "Host"
}
]
}
'''
payload = json.loads(text)
results = payload['results']
for result in results:
attrs = result['attrs']
name = attrs['name']
state = attrs['state']
print("name: %s state: %s"%(name,state))
您的输入类型是什么?字符串?您可以使用
import ast;ast.literal\u eval(您的字符串)
将字符串转换为dict。请参见此处:@shotgunner OP说它是JSON,您建议使用ast
来解析它?您一定是在开玩笑。这显然不是适合此工作的工具。辛格:这是JSON,而不是python如果它是JSON,请使用JSON
模块来解析它。不是其他任何东西。
import json
text = '''{
"results": [
{
"attrs": {
"name": "par.abd",
"state": 1.0
},
"joins": {
},
"meta": {
},
"name": "par.abd",
"type": "Host"
},
{
"attrs": {
"name": "bbc.abd",
"state": 1.0
},
"joins": {
},
"meta": {
},
"name": "bbc.abd",
"type": "Host"
}
]
}
'''
payload = json.loads(text)
results = payload['results']
for result in results:
attrs = result['attrs']
name = attrs['name']
state = attrs['state']
print("name: %s state: %s"%(name,state))