如何在VTL中的AWS APIG映射模板中处理嵌套列表

时间:2016-03-03 11:47:53

标签: amazon-web-services aws-api-gateway vtl

(这是我的模型方案:

{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "QuestionsModel",
"type": "array",
"items": {
"type": "object",
"properties": {
    "section_name": { "type": "string" },
    "options" : { 
        "type" : "array",
        "items" : {
            "type" : "array",
            "items" : {
                "type" : "string"
            }
        }
    }
}

这是映射模板:

#set($inputRoot = $input.path('$'))
[
#foreach($question in $inputRoot) {
    "section_name" : "$question.section_name.S",
    "options" : [
    #foreach($items in $question.options.L) {
    [
        #foreach($item in $items.L) {
        "$item.S"
        }#if($foreach.hasNext),#end
        #end
    ]        
    }#if($foreach.hasNext),#end
    #end
    ]

}#if($foreach.hasNext),#end

#end
]

虽然这种语法正确地映射了数据,但它导致“options”是一个空数组。

如果未指定“选项”,则我的iOS应用会收到有效的JSON。但是当我为“选项”尝试各种语法时,我会得到无效的JSON或“内部服务错误”,而CloudWatch提供Unable to transform response并不是更好。

使用此内容填充有效选项:{L=[{"L":[{"S":"1"},{"S":"Dr"}]},{"L":[{"S":"2"},{"S":"Mr"}]},{"L":[{"S":"3"},{"S":"Ms"}]},{"L":[{"S":"4"},{"S":"Mrs"}]},{"L":[{"S":"5"},{"S":"Prof."}]}]}由Lambda函数提供。

此时我只能得出结论,API Gateway VTL不支持嵌套数组。

1 个答案:

答案 0 :(得分:1)

AWS iOS SDK for Modeling不支持数组阵列。

您必须在任何嵌套数组之间定义字典。 因此,您可以使用额外的“awshack”对象来代替数组/对象/数组/数组:array / object / array / awshack-object / array

{{1}}

在映射模板中,“awshack”滑入最里面的循环之外。

{{1}}

Amazon confirms this limitation