有没有办法使用apache VTL进行深度复制?我试着用requestTemplates来使用x-amazon-apigateway-integration。输入的JSON如下所示:
{
"userid": "21d6523137f6",
"time": "2020-06-16T15:22:33Z",
"item": {
"UserID" : { "S": "21d6523137f6" },
<... some complex json nodes here ...>,
"TimeUTC" : { "S": "2020-06-16T15:22:33Z" },
}
} requestTemplate如下图所示:
requestTemplates:
application/json: !Sub
- |
#set($inputRoot = $input.path('$'))
{
"TableName": "${tableName}",
"ConditionExpression": "attribute_not_exists(TimeUTC) OR TimeUTC > :sk",
"ExpressionAttributeValues": {
":sk":{
"S": "$util.escapeJavaScript($input.path('$.time'))"
}
},
"Item": "$input.path('$.item')", <== Copy the entire item over to Item.
"ReturnValues": "ALL_OLD",
"ReturnConsumedCapacity": "INDEXES",
"ReturnItemCollectionMetrics": "SIZE"
}
- {
tableName: !Ref EventsTable
}问题是,这个项目会被复制成,
"Item": "{UserID={S=21d6523137f6}, Lat={S=37.33180957}, Lng={S=-122.03053391}, ... other json elements..., TimeUTC={S=2020-06-16T15:22:33Z}}",如你所见,整个嵌套的json变成了一个单一的属性。虽然我预计它会成为一个完全成熟的json节点,如下所示,
"Item": {
"UserID" : { "S": "21d6523137f6" },
"Lat": { "S": "37.33180957" },
"Lng": { "S": "-122.03053391" },
<.... JSON nodes ...>
"TimeUTC" : { "S": "2020-06-20T15:22:33Z" }
},有没有可能像上面那样在json节点上进行深度/嵌套复制操作,而不需要像功夫一样迭代节点,并将孩子添加到json节点变量中,等等。
顺便说一句,我使用的是AWS API Gateway请求模板,因此它可能不支持所有Apache VTL模板选项。
发布于 2021-03-28 23:24:10
您需要使用$input.json方法而不是$input.path。
"Item": $input.json('$.item'),请注意,我删除了双引号。
如果你有双引号是因为你想把$.item串起来,你可以这样做:
"Item": "$util.escapeJavaScript($input.json('$.item'))",https://stackoverflow.com/questions/66753189
复制相似问题