首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache VTL -复制节点

Apache VTL -复制节点
EN

Stack Overflow用户
提问于 2021-03-23 04:10:12
回答 1查看 25关注 0票数 0

有没有办法使用apache VTL进行深度复制?我试着用requestTemplates来使用x-amazon-apigateway-integration。输入的JSON如下所示:

代码语言:javascript
复制
{
  "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如下图所示:

代码语言:javascript
复制
        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
            }

问题是,这个项目会被复制成,

代码语言:javascript
复制
  "Item": "{UserID={S=21d6523137f6}, Lat={S=37.33180957}, Lng={S=-122.03053391}, ... other json elements..., TimeUTC={S=2020-06-16T15:22:33Z}}",

如你所见,整个嵌套的json变成了一个单一的属性。虽然我预计它会成为一个完全成熟的json节点,如下所示,

代码语言:javascript
复制
  "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模板选项。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-28 23:24:10

您需要使用$input.json方法而不是$input.path

代码语言:javascript
复制
"Item": $input.json('$.item'),

请注意,我删除了双引号。

如果你有双引号是因为你想把$.item串起来,你可以这样做:

代码语言:javascript
复制
"Item": "$util.escapeJavaScript($input.json('$.item'))",
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66753189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档