使用Python解析json文件,Python有多个具有相同值的对

2024-09-30 08:28:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我是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"]

Tags: nameidjsondatacountsitelocationdescription
1条回答
网友
1楼 · 发布于 2024-09-30 08:28:14

您正在尝试获取listSiteResponsesiteid,但问题是data["listSiteResponse"]["site"]不是一个list,并且您无法获取列表的id;相反,您可以获取该列表中所有项目的id,或者仅获取一个项目:

ids = [x["id"] for x in data["listSiteResponse"]["site"]]

在不使用紧凑列表理解语法的情况下,相当于:

ids = []
for site in data["listSiteResponse"]["site"]:
    ids.append(site["id"])

但在我看来,列表理解语法的可读性要高得多(当然也要短得多)。你知道吗

此外,当您打开一个文件时,您应该确保它被关闭;因此您可以使用try-finally或者更好的方法:

with open('logs/CurrentSitesList.txt') as f:
    data = json.load(f)

p.S.您可能需要阅读PEP8:)

更新:根据OP在评论中的附加评论:

给出了网站列表

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

或者查找与条件匹配的站点ID(概括前面的代码段)

site = [x for x in sites if x["name"] == "Site 1"].pop(0, None)
site_id = site["id"] if site else None
# site_id will contain the ID of the matching site, None otherwise

但是在第二种情况下,根据条件,您可能会得到多个结果,因此如果是这样的话,请相应地调整代码。你知道吗

有关更全面的Python教程,请参阅免费提供的书籍Learn Python the Hard Way。你知道吗

相关问题 更多 >

    热门问题