提问人:Dragon 提问时间:9/27/2023 更新时间:9/27/2023 访问量:109
如何使用 Python 打印嵌套的 JSON 数据?
How to print nested JSON data using Python?
问:
我刚开始编程。我正在尝试使用 Python 脚本打印一些嵌套的 JSON 数据。
下面是 JSON 的示例:
{
"objects": [
{
"id": "1",
"spec_version": "2.1",
"type": "green",
"extensions": {
"extension-definition--ea279b3e-5c71-4632-ac08-831c66a786ba": {
"extension_type": "purple",
"id": "2",
"type": "yellow",
"created_at": "2023-09-26",
"updated_at": "2023-09-26",
"stix_ids": [
"3"
],
}
}
}
]
}
如果我必须在“扩展名”中打印类似“extension_type”的内容,我该怎么做? 我的 Python 脚本:
import json, requests
url = "myUrl"
payload = {}
headers = {
'Authorization': 'Auth',
'Cookie': 'biscuit'
}
response = requests.request("GET", url, headers=headers, data=payload)
my_json = json.loads(response.text)
for data in my_json['objects'][0]['extensions']:
print(data)
输出是:我只能走到这一步,我不知道如何访问“extension_type”并打印它。extension-definition--ea279b3e-5c71-4632-ac08-831c66a786ba
答:
0赞
Muhammad Shamshad Aslam
9/27/2023
#1
data = {
"objects": [
{
"id": "1",
"spec_version": "2.1",
"type": "green",
"extensions": {
"extension-definition--ea279b3e-5c71-4632-ac08-831c66a786ba": {
"extension_type": "purple",
"id": "2",
"type": "yellow",
"created_at": "2023-09-26",
"updated_at": "2023-09-26",
"stix_ids": [
"3"
],
}
}
}
]
}
您可以使用以下代码访问数据:extension_type
data["objects"][0]["extensions"]["extension-definition--ea279b3e-5c71-4632-ac08-831c66a786ba"]["extension_type"]
评论
0赞
Dragon
9/27/2023
你好,它有效!谢谢你:)你知道它垂直打印数据的原因吗?像这样的东西:p u r p l e
0赞
Muhammad Shamshad Aslam
9/27/2023
因为你正在循环浏览一个字符串。所以你的循环是这样的:对于“紫色”的数据。无需循环即可获取此值。
0赞
Dragon
9/27/2023
哦,好的,谢谢你,祝你有美好的一天^^
1赞
Nick
9/27/2023
#2
我假设你知道这些键,但下一个键是动态的,你不知道。在这种情况下,您可以按照以下过程获取值:extensions
extension_type
由于是字典,因此您可以使用以下命令在字典中找到第一个(在本例中仅)值:my_json['objects'][0]['extensions']
ext = next(iter(my_json['objects'][0]['extensions'].values()))
然后简单地获取扩展:
ext_type = ext['extension_type']
输出:
'purple'
0赞
Codist
9/27/2023
#3
另一种方法(适用于本问题中的数据结构)是执行递归搜索,只寻找感兴趣的密钥 - 无论它可能在哪里。
例如:
def search(d, key):
def _search(e):
nonlocal key
if isinstance(e, dict):
if key in e:
return e[key]
for v in e.values():
if (r := _search(v)) is not None:
return r
elif isinstance(e, (list, tuple, set)):
for v in e:
if (r := _search(v)) is not None:
return r
return _search(d)
data = {
"objects": [
{
"id": "1",
"spec_version": "2.1",
"type": "green",
"extensions": {
"extension-definition--ea279b3e-5c71-4632-ac08-831c66a786ba": {
"extension_type": 'purple',
"id": "2",
"type": "yellow",
"created_at": "2023-09-26",
"updated_at": "2023-09-26",
"stix_ids": ["3"],
}
},
}
]
}
print(search(data, 'extension_type'))
输出:
purple
评论