gpt4 book ai didi

python - 获取日期时间的 JSON 可序列化错误

转载 作者:行者123 更新时间:2023-12-01 08:54:44 25 4
gpt4 key购买 nike

我正在尝试使用 boto3 获取 CloudFormation 堆栈详细信息,如下所示

import boto3
import json

def lambda_handler(event, context):
global cnfOutput
cnfOutput = cfn1.describe_stacks(StackName='cfn-init-stack1')
cnf2 = json.dumps(cnfOutput)
return cnf2

下面是打印 cfnOutput 时得到的输出。我尝试执行 json.dumps 并收到错误。请需要帮助

{u'Stacks': [{u'StackId': 'arn:aws:cloudformation:us-west-2:123456789123:stack/cfn-init-stack1/d209-11e8-b83e-0ad6ed005066', u'Description': 'CloudFormation template for creating an ec2 instance', u'Parameters': [{u'ParameterValue': 'e1', u'ParameterKey': 'KeyName'}, {u'ParameterValue': 'ami-a0cfeed8', u'ParameterKey': 'ImageId'}, {u'ParameterValue': 't2.micro', u'ParameterKey': 'InstanceType'}], u'Tags': [], u'Outputs': [{u'Description': 'The public name of the EC2 instance.', u'OutputKey': 'PublicName', u'OutputValue': 'ec2-51-111-211-211.us-west-2.compute.amazonaws.com'}], u'RoleARN': 'arn:aws:iam::123456789123:role/CFN1-role', u'EnableTerminationProtection': False, u'CreationTime': datetime.datetime(2018, 10, 17, 12, 40, 10, 783000, tzinfo=tzlocal()), u'StackName': 'cfn-init-stack1', u'NotificationARNs': ['arn:aws:sns:us-west-2:123456789123:topic2'], u'StackStatus': 'CREATE_COMPLETE', u'DisableRollback': False, u'RollbackConfiguration': {u'RollbackTriggers': []}}], 'ResponseMetadata': {'RetryAttempts': 0, 'HTTPStatusCode': 200, 'RequestId': 'd20e-11e8-b15b-a11f0bf7ba', 'HTTPHeaders': {'x-amzn-requestid': 'd20e-11e8-b15b-a11f0bf7ba', 'date': 'Wed, 17 Oct 2018 13:13:11 GMT', 'content-length': '2010', 'content-type': 'text/xml'}}}

低于错误

File "/usr/lib64/python2.7/json/encoder.py", line 184, in default raise TypeError(repr(o) + " is not JSON serializable") TypeError: datetime.datetime(2018, 10, 17, 12, 40, 10, 783000, tzinfo=tzlocal()) is not JSON serializable

最佳答案

如何将原始字典转换为JSON

以下内容对我来说没有问题:

j = json.dumps({"key": str(datetime.datetime(2017, 10, 12, 12, 40, 10, 783000))})

但是,当我运行它时:

j = json.dumps({"key": datetime.datetime(2017, 10, 12, 12, 40, 10, 783000)})

我遇到了和你一样的错误。

如果可以在调用 json 之前将 datetime.datetime(2018, 10, 17, 12, 40, 10, 783000, tzinfo=tzlocal()) 的结果转换为字符串.dumps,它应该可以解决您的问题。

如何从原始字典中提取OutputValue

# d is your original dictionary
# after you convert the datetime.datetime() result to string
d = {
u'Stacks': [{
u'StackId': 'arn:aws:cloudformation:us-west-2:123456789123:stack/cfn-init-stack1/d209-11e8-b83e-0ad6ed005066',
u'Description': 'CloudFormation template for creating an ec2 instance', u'Parameters': [{
u'ParameterValue': 'e1', u'ParameterKey': 'KeyName'
}, {
u'ParameterValue': 'ami-a0cfeed8', u'ParameterKey': 'ImageId'
}, {
u'ParameterValue': 't2.micro', u'ParameterKey': 'InstanceType'
}], u'Tags': [], u'Outputs': [{
u'Description': 'The public name of the EC2 instance.', u'OutputKey': 'PublicName', u'OutputValue': 'ec2-51-111-211-211.us-west-2.compute.amazonaws.com'
}], u'RoleARN': 'arn:aws:iam::123456789123:role/CFN1-role', u'EnableTerminationProtection': False, u'CreationTime': str(datetime.datetime(2018, 10, 17, 12, 40, 10, 783000)), u'StackName': 'cfn-init-stack1', u'NotificationARNs': ['arn:aws:sns:us-west-2:123456789123:topic2'], u'StackStatus': 'CREATE_COMPLETE', u'DisableRollback': False, u'RollbackConfiguration': {
u'RollbackTriggers': []
}
}],
'ResponseMetadata': {
'RetryAttempts': 0,
'HTTPStatusCode': 200,
'RequestId': 'd20e-11e8-b15b-a11f0bf7ba',
'HTTPHeaders': {
'x-amzn-requestid': 'd20e-11e8-b15b-a11f0bf7ba',
'date': 'Wed, 17 Oct 2018 13:13:11 GMT',
'content-length': '2010',
'content-type': 'text/xml'
}
}
}

stacks = d.get("Stacks")

if stacks == None:
print("Key not in dictionary")
else:
for s in stacks:
outputs = s.get("Outputs")
if outputs == None:
continue

for o in outputs:
print(o.get("OutputValue"))

在您的问题中使用字典时(在将 datetime. datetime() 将结果转换为字符串,但在将整个字典转换为 JSON 之前)。

关于python - 获取日期时间的 JSON 可序列化错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52856731/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com