猿问

python 中的 Runtime.MarshalError

我收到此错误。我正在使用 python 3.7 执行 aws lambda 函数的代码来了解 Quicksight 仪表板版本。提前致谢!


errorMessage:“无法封送响应:日期时间类型的对象不可 JSON 序列化”,


错误类型:“运行时.MarshalError”


代码-


import boto3

import time

import sys

client = boto3.client('quicksight')

def lambda_handler(event, context):

    response = client.list_dashboard_versions(AwsAccountId='11111', DashboardId='2222',MaxResults=10)

    return response


至尊宝的传说
浏览 164回答 3
3回答

慕田峪7331174

我的快速修复可能是:import boto3import timeimport sysimport jsonclient = boto3.client('quicksight')def lambda_handler(event, context):    response = client.list_dashboard_versions(AwsAccountId='11111', DashboardId='2222',MaxResults=10)    return json.dumps(response, default=str)

潇湘沐

返回看起来像这样 -{    'DashboardVersionSummaryList': [        {            'Arn': 'string',            'CreatedTime': datetime(2015, 1, 1),            'VersionNumber': 123,            'Status': 'CREATION_IN_PROGRESS'|'CREATION_SUCCESSFUL'|'CREATION_FAILED'|'UPDATE_IN_PROGRESS'|'UPDATE_SUCCESSFUL'|'UPDATE_FAILED',            'SourceEntityArn': 'string',            'Description': 'string'        },    ],    'NextToken': 'string',    'Status': 123,    'RequestId': 'string'}如您所见,CreatedTime返回为日期时间。如果您想将其作为 JSON 返回,您应该转换该值。

慕田峪9158850

今天我正在努力解决这个问题,使用一种也返回日期时间的方法。在我的示例中,'JoinedTimestamp': datetime(2015, 1, 1)导致相同的Unable to marshal response。如果您不需要CreatedTime值,您也可以将其从响应中删除,如下所示:    for account in list_accounts_response["Accounts"]:        if "JoinedTimestamp" in account:            del account["JoinedTimestamp"]为了跟进 Joseph Lane 的答案,转换这个值可能是这样的:    for account in list_accounts_response["Accounts"]:        if "JoinedTimestamp" in account:            account["JoinedTimestamp"] = str(account["JoinedTimestamp"])
随时随地看视频慕课网APP

相关分类

Python
我要回答