3

(これが私のモデルスキームです:

{
"$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
]

この構文はデータを正しくマップしますが、「オプション」は空の配列になります。

「オプション」を指定しないと、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 はネストされた配列をサポートしていないとしか言​​えません。

4

1 に答える 1

4

AWS iOS SDK for Modeling は配列の配列をサポートしていません。

ネストされた配列の間に辞書を定義する必要があります。したがって、配列/オブジェクト/配列/配列の代わりに、追加の「awshack」オブジェクトを挿入します: 配列/オブジェクト/配列/awshack-object/配列

{
"$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" : "object",
                          "properties" : {
                              "awshack" : {
                                  "type" : "array",
                                  "items" : { "type" : "string" }
                              }
                          }
                    }

        }
    }
}
}

マッピング テンプレートでは、「awshack」が最も内側のループの外側に挿入されます。

#foreach($items in $question.options.L)
    {"awshack" : 
        [#foreach($item in $items.L)
            "$item.S"#if($foreach.hasNext),#end
        #end
    #if($foreach.hasNext),#end
]}#if($foreach.hasNext),#end
#end

Amazon はこの制限を認めています。

于 2016-03-07T11:38:35.727 に答える