遍历嵌套的 JSON
python 272
原文标题 :Traversing through nested JSON
我有以下字典数据。
"tags": {
"tags":
[
{
"applied_at": 1645181955,
"applied_by":
{
"id": "1288541",
"type": "admin"
},
"id": "6355625",
"name": "No Reply > 2hrs",
"type": "tag"
},
{
"applied_at": 1645185249,
"applied_by":
{
"id": "4597637",
"type": "admin"
},
"id": "6258671",
"name": "Resolution Provided",
"type": "tag"
},
{
"applied_at": 1647238491,
"applied_by":
{
"id": "4597637",
"type": "admin"
},
"id": "6258671",
"name": "Resolution Provided",
"type": "tag"
}
],
"type": "tag.list"
}
从上面可以看出,我们有一个标签叫做Resolution Provided
。
我的条件是获得第一个分辨率应用时间和第二个分辨率应用时间,它可能会像 n 次一样持续下去。您可以从名为 applied_at
的同一组字段中获取时间。
我正在尝试通过 Python 本身来实现这一点。
有人可以帮助我的方法吗,我不是开发人员,而是想成为一个。所以任何建设性的批评者都对我很好。我所需要的只是一个逻辑,以便我可以尝试。
回复
我来回复-
Kristian 评论
正如我在评论中所说,首先您要将 json 字符串解析为字典
import json a = """ { "tags": { "tags": [ { "applied_at": 1645181955, "applied_by": { "id": "1288541", "type": "admin" }, "id": "6355625", "name": "No Reply > 2hrs", "type": "tag" }, { "applied_at": 1645185249, "applied_by": { "id": "4597637", "type": "admin" }, "id": "6258671", "name": "Resolution Provided", "type": "tag" }, { "applied_at": 1647238491, "applied_by": { "id": "4597637", "type": "admin" }, "id": "6258671", "name": "Resolution Provided", "type": "tag" } ], "type": "tag.list" } } """ parsed = json.loads(a) print(parsed)
输出:
{'tags': {'tags': [{'applied_at': 1645181955, 'applied_by': {'id': '1288541', 'type': 'admin'}, 'id': '6355625', 'name': 'No Reply > 2hrs', 'type': 'tag'}, {'applied_at': 1645185249, 'applied_by': {'id': '4597637', 'type': 'admin'}, 'id': '6258671', 'name': 'Resolution Provided', 'type': 'tag'}, {'applied_at': 1647238491, 'applied_by': {'id': '4597637', 'type': 'admin'}, 'id': '6258671', 'name': 'Resolution Provided', 'type': 'tag'}], 'type': 'tag.list'}}
然后你想按它的
applied_at
tag排序:tags = parsed["tags"]["tags"] tags.sort(key=lambda i: i["applied_at"]) print(tags)
输出:
[{'applied_at': 1645181955, 'applied_by': {'id': '1288541', 'type': 'admin'}, 'id': '6355625', 'name': 'No Reply > 2hrs', 'type': 'tag'}, {'applied_at': 1645185249, 'applied_by': {'id': '4597637', 'type': 'admin'}, 'id': '6258671', 'name': 'Resolution Provided', 'type': 'tag'}, {'applied_at': 1647238491, 'applied_by': {'id': '4597637', 'type': 'admin'}, 'id': '6258671', 'name': 'Resolution Provided', 'type': 'tag'}]
这两个输出是相同的,因为您的初始 json 文件已经排序。
然后如果你想知道第一个应用哪个标签,只需调用
tags[0]
,第二个由tags[1]
,以此类推print(tags[0])
的输出{'applied_at': 1645181955, 'applied_by': {'id': '1288541', 'type': 'admin'}, 'id': '6355625', 'name': 'No Reply > 2hrs', 'type': 'tag'}
2年前 -
CryptoFool 评论
我不明白你想做什么。我从您的描述中得到的是,名称为“Resolution Provided”的标签对您很重要,对于这些标签,您想对“applied_at”字段做一些事情。
请注意,您提供的“JSON”实际上不是有效的 JSON。您需要在该数据周围使用一组额外的花括号,以使其成为有效的 JSON。
以下是如何为名称为“Resolution Provided”的标签提取“applied_at”字段。此代码添加了额外的花括号,以允许您的数据被解析为有效的 JSON:
import json data = json.loads("{" + data + "}") for tag in data['tags']['tags']: if tag['name'] == "Resolution Provided": print(tag['applied_at'])
结果:
1645185249 1647238491
2年前 -
Burak Üren 评论
我能想到的第一个是首先到达“标签”,然后我会看到一个字典列表。所以我可以在这里使用 for 循环遍历这些字典。然后我会到达键很容易,我会用这些值做我想做的事。
如果不是你想做的,也许我只是无法理解这个问题,哈哈:D
2年前