Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从Json api响应中减去键,并检查是否有更多键,如果有,将它们放入列表中?_Python_Json_List_Api_Response - Fatal编程技术网

Python 如何从Json api响应中减去键,并检查是否有更多键,如果有,将它们放入列表中?

Python 如何从Json api响应中减去键,并检查是否有更多键,如果有,将它们放入列表中?,python,json,list,api,response,Python,Json,List,Api,Response,所以我有一个复杂的问题,我有一个JSON API响应,其中的键是“persons”中的“key” 但在某些情况下,有不止一个“键”,我试图创建一个for循环来遍历响应,但它会打印20次。此外,我不知道如何将这些“钥匙”放在一个列表或一个我可以访问它们的地方 为了让它更简单,我得到了我的请求的响应 {'id': 'a2b1109e-e142-4559-984c-3f9997b1db6a', 'externalId': None, 'name': 'tyr', 'description': '',

所以我有一个复杂的问题,我有一个JSON API响应,其中的键是“persons”中的“key”

但在某些情况下,有不止一个“键”,我试图创建一个for循环来遍历响应,但它会打印20次。此外,我不知道如何将这些“钥匙”放在一个列表或一个我可以访问它们的地方

为了让它更简单,我得到了我的请求的响应

{'id': 'a2b1109e-e142-4559-984c-3f9997b1db6a', 'externalId': None, 'name': 'tyr', 'description': '', 'client': '', 'reference': '56345', 'isMonitoring': False, 'monitoringSince': None, 'hasRiskProfile': True, 'riskProfile': 5, 'monitorFrequency': 4, 'mainBindable': None, 'organizationId': '65647b97-5ada-4362-bb3f-cae016722be6', 'userId': 'dd3cc015-e5cf-4a03-9408-74b102900836', 'createDate': '2021-03-23T11:29:55.2027037Z', 'updateDate': '2021-03-23T11:29:55.2027039Z', 'lastMonitorDate': '2021-03-23T11:29:55.2027039Z', 'persons': [{'firstname': 'ya', 'surname': 'o', 'dateOfBirth': '', 'updatedWithIdinIdentificationRequestPerson': None, 'relatedList': None, 'updatedWithIdinIdentificationRequestPersonDate': None, 'history': [], 'fullname': 'ya o', 'externalId': None, 'key': '8b92c210-eee6-4ab2-a093-48e4428af7f8', 'searchResults': [], 'requests': [], 'createDate': '2021-03-23T11:29:57.3853552Z', 'updateDate': '2021-03-23T11:29:57.3853553Z', 'archivedDate': None, 'isArchived': False, 'hasPepSearchResults': False, 'notes': []}], 'businesses': [], 'monitorIds': [], 'addresses': [], 'notifcations': [], 'monitors': []}
每次密钥的数量可能不同,因此我需要检查返回的密钥是否已经存在。如果已经存在,则不执行任何操作。如果密钥不存在,则将该密钥保存在变量中

下面是一个有两个键“key”时的响应示例

更新我用for循环解决了第一个获得多个密钥的问题:

for persons in api_response['persons']:
        print(persons['key'])
输出:

 0b8eb227-0105-40a3-bc8b-8e3ef345a3f3
 d9b68e7a-ffdd-44ea-86a4-ea4c541146b4
在这种情况下,如何只保存最后一个结果

d9b68e7a-ffdd-44ea-86a4-ea4c541146b4

假设您正在使用
请求
从api获取数据,那么您的响应将附带一个
json()
函数。意思是你可以这样做:

导入请求
response=requests.get(“example.com/api/random/endpoint”)
data=response.json()
json函数反过来对响应内容执行与
json.loads()
等效的操作。假设您的API返回一个JSON对象,它将被转换为一个字典(根据

之后,您可以按照go2nirvana的答案操作该词典,就像您操作任何dict一样。例如,使用
data.pop(“key”)
删除该键上的值,遍历词典,或者使用词典执行任何其他操作


诚然,您的问题有点模糊,我不确定您想要对接收到的数据做什么,但这就是如何以易于在python中使用的形式获取数据的方法。

请阅读介绍教程。“演示如何解决此编码问题”是。您需要做一个测试,然后询问关于它的具体问题(如果必要)。请检查我更新的问题,我提供了我的回答,因为当我使用data.pop(“key”)时这给了我一个机会keyerror@MarnixBolier在这种情况下,键很可能丢失,如果键丢失,您可以给pop函数一个默认返回值,例如
data。如果键“key”,则pop(“key”,None)
将返回None缺少。
None
可以是任何内容,例如False或字符串等。您可能会这样认为,但请检查附加的响应。响应中有一个名为key的键…@MarnixBolier在persons数组中的对象上的数据本身上没有名为
key
的键。因此,您必须访问此项。例如
data[“persons”][0][“key”]
,whcih从数据中选择persons数组,选择该数组中的第一个条目(对象),然后从第一个对象中选择键(称为
key
)。感谢帮助人,我根据您的建议解决了整个问题
d9b68e7a-ffdd-44ea-86a4-ea4c541146b4