You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python新手求助:遍历JSON打印今日创建用户UserName时报错

问题分析与解决

咱们来一步步拆解你遇到的问题,帮你把代码修正过来:

1. 遍历JSON数据的方式错误

你原始代码里的for Users, UserName in users.items()是核心问题所在:

  • users是一个包含"Users"键的字典,users.items()会返回键值对,比如第一个元素是("Users", [你的用户列表])。
  • 这时候Users变量拿到的是字符串"Users",UserName拿到的是整个用户列表。当你尝试Users['CreateDate']时,本质是在对字符串"Users"使用字典索引,自然会抛出string indices must be integers的错误——因为字符串只能用整数下标(比如"Users"[0]取第一个字符)。

正确的做法是先取出"Users"对应的列表,再遍历列表里的每个用户字典:

# 假设你的JSON数据已经解析成了名为users的字典
user_list = users["Users"]
for user in user_list:
    # 现在user是每个用户的字典,可以正常访问键值对
    print(user['CreateDate'])

2. 日期类型不匹配的问题

就算遍历方式对了,直接用user['CreateDate'] == datetime.today()也永远不会成立:

  • user['CreateDate']是字符串类型(比如"2013-03-07T05:14:48Z"),而datetime.today()返回的是datetime对象,两者类型不同,无法直接相等。
  • 另外,JSON里的日期是UTC时区的(末尾带Z),datetime.today()返回的是本地时间,时区不一致也会导致比较错误。

我们需要把字符串日期解析成datetime对象,统一时区后再比较。如果只需要匹配年月日和今天一致,可以这样处理:

from datetime import datetime

# 解析UTC日期字符串,提取年月日部分
def get_date_from_utc_str(date_str):
    # 把末尾的Z替换成+00:00,让fromisoformat能识别UTC时区
    utc_date = datetime.fromisoformat(date_str.replace("Z", "+00:00"))
    # 返回年月日的元组,用于和今天的日期比较
    return utc_date.date()

today = datetime.today().date()

完整修正后的代码

把上面的逻辑整合起来,完整可运行的代码如下:

import json
from datetime import datetime

# 假设你的原始JSON字符串是这样的(先解析成字典)
json_str = '''
{
    "Users": [
        {
            "UserName": "Adele",
            "Path": "/",
            "CreateDate": "2023-10-05T05:14:48Z",
            "UserId": "AKIAI44QH8DHBEXAMPLE",
            "Arn": "arn:aws:iam::123456789012:user/Adele"
        },
        {
            "UserName": "Bob",
            "Path": "/",
            "CreateDate": "2012-09-21T23:03:13Z",
            "UserId": "AKIAIOSFODNN7EXAMPLE",
            "Arn": "arn:aws:iam::123456789012:user/Bob"
        }
    ]
}
'''

# 解析JSON字符串为字典
users = json.loads(json_str)

def get_date_from_utc_str(date_str):
    utc_date = datetime.fromisoformat(date_str.replace("Z", "+00:00"))
    return utc_date.date()

today = datetime.today().date()

# 遍历用户列表并筛选
user_list = users["Users"]
for user in user_list:
    create_date = get_date_from_utc_str(user['CreateDate'])
    if create_date == today:
        print(f"今日创建的用户:{user['UserName']}")

这样就能正确遍历用户列表,并且筛选出创建日期为今日的用户啦~

内容的提问来源于stack exchange,提问作者user2019182

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:00:58