遍历嵌套的 JSON

xiaoxingxing python 218

原文标题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 本身来实现这一点。

有人可以帮助我的方法吗,我不是开发人员,而是想成为一个。所以任何建设性的批评者都对我很好。我所需要的只是一个逻辑,以便我可以尝试。

原文链接:https://stackoverflow.com//questions/71463708/traversing-through-nested-json

回复

我来回复
  • Kristian的头像
    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_attag排序:

    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年前 0条评论
  • CryptoFool的头像
    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年前 0条评论
  • Burak Üren的头像
    Burak Üren 评论

    我能想到的第一个是首先到达“标签”,然后我会看到一个字典列表。所以我可以在这里使用 for 循环遍历这些字典。然后我会到达键很容易,我会用这些值做我想做的事。

    如果不是你想做的,也许我只是无法理解这个问题,哈哈:D

    2年前 0条评论