我是python的新手,我有一个json响应(见下文)。我想搜索site1
的id值,并列出id的所有值。
{ "listSiteResponse" : { "count":4 ,"site" : [ {
"id": "28e4cc3f-d0c2-46f4-9e0c-b532fd148292",
"simpleid": 15,
"name": "Site1",
"description": "Blr1",
"location": "Bangalore1",
}, {
"id": "188d4b47-1955-43e1-82a8-7ccedcfc636b",
"simpleid": 16,
"name": "Site2",
"description": "Blr2",
"location": "Bangalore2",
}, {
"id": "63fab512-4b52-4038-8a3b-4632f1911dca",
"simpleid": 17,
"name": "Site3",
"description": "Blr3",
"location": "Bangalore3",
}, {
"id": "2db3949a-ba2f-4e93-85b5-24a995fa3d99",
"simpleid": 18,
"name": "Site4",
"description": "Blr4",
"location": "Bangalore4",
}
}}
我尝试使用以下脚本列出ID但我收到错误:
from pprint import pprint
json_data=open('logs/CurrentSitesList.txt')
data = json.load(json_data)
test=data["listSiteResponse"]["site"]["id"]
答案 0 :(得分:2)
您正试图获取id
site
的{{1}},但问题是listSiteResponse
是data["listSiteResponse"]["site"]
而不是单个项目,你无法获得列表的list
;相反,您可以在该列表中获取所有项目的id
或仅一个项目:
id
其中,不使用紧凑列表理解语法,相当于:
ids = [x["id"] for x in data["listSiteResponse"]["site"]]
但是列表理解语法是,IMO,更具可读性(以及明显更短)。
此外,当您打开文件时,应确保它已关闭;所以你可以使用ids = []
for site in data["listSiteResponse"]["site"]:
ids.append(site["id"])
或者更好:
try-finally
P.S。您可能需要阅读PEP8:)
更新:根据OP在评论中的附加评论:
给出网站列表
with open('logs/CurrentSitesList.txt') as f:
data = json.load(f)
您可能想要找到具有给定ID的网站
sites = data["listSiteResponse"]["site"]
或找到符合条件的网站ID(概括上一个代码段)
site = [x for x in sites if x["id"] == <SPECIFIC_ID>].pop(0, None)
# site will contain either the found object, or None
但在第二种情况下,根据标准,您可能会获得多个结果,因此如果是这种情况,请相应调整您的代码。
有关更全面的Python教程,请参阅免费提供的图书 Learn Python the Hard Way 。