Velocity в AWS Api Gateway: как получить доступ к массиву объектов

Итак, в AWS Api Gateway я запрашиваю DynamoDB и получаю ответ в формате JSON:

https://pastebin.com/GpQady4Z

Итак, Items — это массив из 3-х объектов. Мне нужно извлечь свойства этих объектов: TS, Key и CamID.

Я использую Velocity в ответе на интеграцию. Вот мой шаблон отображения:

#set($count = $input.json('$.Count'))
#set($items = $input.json('$.Items'))
{
"count" : $count,
"items" : $items,
"first_item": $items[0]
},

Результат от шлюза API:

{
"count" : 3,
"items" : [{"TS":{"N":"1599050893346"},"Key":{"S":"000000/000000_2020-08-02-12.48.13.775-CEST.mp4"},"CamID":{"S":"000000"}},{"TS":{"N":"1599051001832"},"Key":{"S":"000000/000000_2020-08-02-12.50.01.220-CEST.mp4"},"CamID":{"S":"000000"}},{"TS":{"N":"1599051082769"},"Key":{"S":"000000/000000_2020-08-02-12.51.22.208-CEST.mp4"},"CamID":{"S":"000000"}}],
"first_item": 
}

first_item всегда возвращает пустое значение

В то время как в чистом массиве, как это:

#set($foo = [ 42, "a string", 21, $myVar ])
"test" : $foo[0]

тест возвращает 42

Почему мой код не работает с массивом объектов?


person stKKd    schedule 02.08.2020    source источник


Ответы (1)


$items — это строка JSON (а не объект JSON), поэтому $items[0] не имеет смысла.

Если вы хотите получить доступ к первому элементу, используйте $input.json('$.Items[0]').

Если вы хотите перебрать их, вы можете сначала преобразовать строку JSON в объект, используя $util.parseJson()

person jellycsc    schedule 02.08.2020
comment
Да, я пробовал это раньше. Проблема с этим методом заключается в том, что я не могу выполнить итерацию следующим образом: $input.json('$.Items[$i]') Поскольку он не оценивает $i - person stKKd; 02.08.2020