Php JSON文档必须有效
我正在尝试使用AWS PHP SDK对dynamo中的一个表进行简单更新<代码>我得到一个错误,JSON文档必须是有效的,并且在其根目录下是一个对象。 关于下面的代码。在我看来,这是一个有效的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'] . '}}
$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";
}