繁体   English   中英

Class如何转换<str>至 Class<dict></dict></str>

[英]How to convert Class<str> to Class<dict>

我需要在 DynamoDB 中上传一些项目。 我正在使用boto3资源。 我需要插入的项目是几个JSON串在一起。 我需要将它们转换为dict ,以便将它们插入 DynamoDB。

def update_record_Dynamo(
    company_name,
    first_name,
    last_name,
    email,
    status,
    phone):
    
    table_name = "cpe-uat-ddb-cem-newpro"
    table = boto3.resource("dynamodb").Table(table_name)
    
    response = table.get_item(Key={'company': company_name})
    
    existing_user = response['Item']['users']

    # user looks like this = 
    '''
    {
        "first_name": "bala",
        "last_name": "Reaburn",
        "email": "b1010gmail.com",
        "phone": "9053258111",
        "status": "administrator"
    }
    '''
        
    flag = {
        "first_name": first_name,
        "last_name": last_name,
        "email": email,
        "phone": phone,
        "status": status
    }
    
    flag_dict = json.dumps([existing_user, flag])
    # new_users = jam+flag
    # new_users = json.loads(flag_dict)
    
    flag_dict = json.dumps(flag_dict)
    flag_dict = json.loads(flag_dict)
    
    final = json.dumps(eval(str(flag_dict)))
    print(type(final))
    
    update_record_response = table.update_item(
        Key={'company': company_name},
        AttributeUpdates={
            'users': final,
            },
        )
    
    return update_record_response

这是我得到的错误:

botocore.exceptions.ParamValidationError: Parameter validation failed:
Invalid type for parameter AttributeUpdates.users, value: [
{
    "last_name": "",
    "first_name": "",
    "email": "",
    "status": ""
}
, 
{
    "first_name": "bala",
    "last_name": "Reaburn",
    "email": "b1010gmail.com",
    "phone": "9053258688",
    "status": "administrator"
}
], type: <class 'str'>, valid types: <class 'dict'>
Invalid type for parameter AttributeUpdates.users, value: [{"last_name": "", "first_name": "", "email": "", "status": ""}, {"first_name": "bala", "last_name": "Reaburn", "email": "b1010gmail.com", "phone": "9053258688", "status": "administrator"}], type: <class 'str'>, valid types: <class 'dict'>

看起来您正在将其上传为字典列表,而不是字典本身。

flag_dict = json.dumps([existing_user, flag])

创建列表,您可以在返回的错误中看到它仍然有括号。 如果你想要那种风格,你会想要将它重新创建为字典的字典。

编辑:要重写上面的行,请尝试

flag_dict = {
             'existing_user': existing_user,
             'flag': flag
             }

编辑 2:

flag = {"first_name":first_name, "last_name":last_name, "email":email,"phone":phone, "status":status}
    
final = {
         'existing_user': existing_user,
         'flag': flag
         } 
    
update_record_response = table.update_item(
        Key={'company': company_name},
        AttributeUpdates={
            'users': final,
            },
        )
    
    return update_record_response

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM