首页 > 解决方案 > 遍历 JSON 的各项并获取最新记录

问题描述

我有一个 JSON 字符串,我希望有 1 或 2 条最新记录取决于我的 JSON 的时间戳。

示例如下所示

[
    {
        "timestamp": 1612283061106,
        "user": "email1",
        "ipAddress": "IP1",
        "resourceType": "Login",
        "resourceName": "Name1"
    },
    {
        "timestamp": 1612282839939,
        "user": "email1",
        "ipAddress": "Ip3",
        "resourceType": "Login",
        "resourceName": "name1"
    },
    {
        "timestamp": 1612279167153,
        "user": "email2",
        "ipAddress": "Ip2",
        "resourceType": "Login",
        "resourceName": "name2"
    },
    {
        "timestamp": 1612279151891,
        "user": "email1",
        "ipAddress": "Ip1",
        "resourceType": "Login",
        "resourceName": "name1"
    }
]

我希望我的 JSON 字符串的输出看起来像这样

[   {
        "timestamp": 1612279167153,
        "user": "email2",
        "ipAddress": "Ip2",
        "resourceType": "Login",
        "resourceName": "name2"
    },
    {
        "timestamp": 1612279151891,
        "user": "email1",
        "ipAddress": "Ip1",
        "resourceType": "Login",
        "resourceName": "name1"
    }
]

谢谢

标签: jsonpython-3.x

解决方案


首先,您提到的 JSON 字符串不是有效的 json,因为末尾有一个 ","," }, ] 还有一个 "," 在Name1", }.

假设您已更正 JSON 字符串。现在让我们看看解决方案。但是您没有正确提及您想要多少最新记录。因此,相应地更改以下代码中提到的行。

import json

inp = '''[ { "timestamp": 1612283061106, "user": "email1", "ipAddress": "IP1", "resourceType": "Login", "resourceName": "Name1" }, 
{ "timestamp": 1612282839939, "user": "email1", "ipAddress": "Ip3", "resourceType": "Login", "resourceName": "name1" }, 
{ "timestamp": 1612279167153, "user": "email2", "ipAddress": "Ip2", "resourceType": "Login", "resourceName": "name2" }, 
{ "timestamp": 1612279151891, "user": "email1", "ipAddress": "Ip1", "resourceType": "Login", "resourceName": "name1" } ]'''

inp_dict = json.loads(inp)

inp_dict.sort(key= lambda x: x['timestamp'])

output = inp_dict[0:2] # <---- Change 2 to the number of latest records you want.

print(json.dumps(output))

输出 :

[{"resourceName": "name1", "user": "email1", "resourceType": "Login", "ipAddress": "Ip1", "timestamp": 1612279151891}, {"resourceName": "name2
", "user": "email2", "resourceType": "Login", "ipAddress": "Ip2", "timestamp": 1612279167153}] 

推荐阅读