Php JSON文档必须有效

Php JSON文档必须有效,php,amazon-web-services,sdk,aws-sdk,Php,Amazon Web Services,Sdk,Aws Sdk,我正在尝试使用AWS PHP SDK对dynamo中的一个表进行简单更新我得到一个错误,JSON文档必须是有效的,并且在其根目录下是一个对象。 关于下面的代码。在我看来,这是一个有效的JSON。错误显示在$eav变量的行上 $eav = $marshaler->marshalJson(' {":Aname": {"S": ' . $profile['Aname'] . '}}

我正在尝试使用AWS PHP SDK对dynamo中的一个表进行简单更新<代码>我得到一个错误,JSON文档必须是有效的,并且在其根目录下是一个对象。 关于下面的代码。在我看来,这是一个有效的JSON。错误显示在
$eav
变量的行上

                $eav = $marshaler->marshalJson('
                      {":Aname": {"S": ' . $profile['Aname'] . '}}
                 ');

                // dynamodb table update (NEW ATTRIBUTE)
                $params = [
                        'TableName' => 'table-example',
                        'Key' => 'table-key-example',
                        'UpdateExpression' => 
                            'set Aname = :Aname',
                        'ExpressionAttributeValues' => $eav,
                        'ReturnValues' => 'UPDATED_NEW'
                ];

                try {
                        $result = $dynamodb->updateItem($params);
                        echo "Updated item.\n";
                        print_r($result['Attributes']);
                    
                    } catch (DynamoDbException $e) {
                        echo "Unable to update item:\n";
                        echo $e->getMessage() . "\n";
                    }

为什么要手动生成JSON?
$profile['Aname']
包含什么?ExpressionAttributeValues参数的值不应是字符串,而应是关联数组。SDK将为您封送它。因此,不要让您的
$eav
变量成为字符串,只需使用
[“:Aname”=>[“S”=>$profile['Aname']]]
。我正在跟踪文档,这就是创建变量的方式
$profile['Aname']
是一个字符串值,您指的是哪些文档?我在看,我在看这些
$eav = $marshaler->marshalJson('{":Aname": "' . $profile['Aname'] . '"}');

// dynamodb table update (NEW ATTRIBUTE)
$params = [
    'TableName' => 'table-example',
    'Key' => 'table-key-example',
    'UpdateExpression' => 'set Aname = :Aname',
    'ExpressionAttributeValues' => $eav,
    'ReturnValues' => 'UPDATED_NEW'
];

try {
    $result = $dynamodb->updateItem($params);
    echo "Updated item.\n";
    print_r($result['Attributes']);

} catch (DynamoDbException $e) {
    echo "Unable to update item:\n";
    echo $e->getMessage() . "\n";
}