Невозможно проанализировать ответ API AWS от DynamoDB с помощью шаблона сопоставления

Я использую AWS DynamoDB и ASW API Gateway. У меня есть API для извлечения некоторого контента из БД, который находится в формате ниже:

    {
      "Count": 1,
      "Items": [
        {
          "id": {
            "S": "111"
          },
          "title": {
            "S": "title"
          },
          "description": {
            "L": [
              {
                "S": "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
              },
              {
                "S": "Lorem ipsum dolor sit amet, consectetur adipiscing elitDuis felis nibh, 
    mattis 
    vitae augue a, congue malesuada orciDuis felis nibh, mattis vitae augue a, congue malesuada 
    orci"
              },
              {
                "S": "Nullam in gravida sem. Nulla sagittis dignissim ultricies"
              }
            ]
          }
        }
      ]
    }

Что мне нужно разобрать на что-то вроде этого:

    {
      "response": [
        {
          "id": "111",
          "title": "title",
          "description": [
            "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
            "Duis felis nibh, mattis vitae augue a, congue malesuada orciDuis felis nibh, mattis 
    vitae augue a, congue malesuada orci",
            "Nullam in gravida sem. Nulla sagittis dignissim ultricies"
          ]
        }
      ]
    }

Вот мой код для шаблона сопоставления ответов:

    #set($inputRoot = $input.path('$'))
    {
        "response": [
            #foreach($elem in $inputRoot.Items) {
                "id": "$elem.id.S",
                "description": [
                   #foreach($paramName in $elem.description.L)
                     "$paramName.S" 
                     #if($foreach.hasNext),#end],
                "title": "$elem.title.S"
            }#if($foreach.hasNext),#end
        #end
        ]
    }

id и title я могу разобрать, но не описание. Пожалуйста, дайте мне знать, что я делаю не так.

1 ответ

Решение

Вы просто забыли один оператор END:-)

#set($inputRoot = $input.path('$'))
{
    "response": [
        #foreach($elem in $inputRoot.Items) {
            "id": "$elem.id.S",
            "title": "$elem.title.S",
            "description": [
               #foreach($paramName in $elem.description.L)
                "$paramName.S"#if($foreach.hasNext),#end
                #end
            ]
        }#if($foreach.hasNext),#end
    #end
    ]
}
Другие вопросы по тегам