Создать объект JSON с языком шаблонов скорости - PullRequest
0 голосов
/ 13 марта 2019

Я работаю с Apache Velocity Template Language (VTL) в AWS AppSync. В моем шаблоне запроса я запрашиваю неопределенное количество элементов с различными элементами. В шаблоне ответа я хочу преобразовать результат в объект JSON, который мне понадобится позже для моей операции BatchDeleteItem. Вот как я решил это в настоящее время:

#set($deleteObject='{"Id" : { "S": "nodelete" },"Sk" : { "S": "nodelete" }}')
#set($replaceDeleteObject ="")
#set($separator="")

#foreach( $item in $ctx.result.items )
  #set($replaceDeleteObject = $replaceDeleteObject + $separator + '{"Id" : { "S": "' + $item.Id + '" },"Sk" : { "S": "' + $item.Sk + '" }}')
  #set($separator = ",")
  #set($deleteObject = $replaceDeleteObject)
#end

$util.qr($ctx.stash.put("deleteObject", $deleteObject))

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

Однако у меня вопрос , можно ли напрямую создать какой-либо объект JSON в vtl, в который я могу добавить свои значения вместо создания этой строки в форме объекта JSON?

Ответы [ 2 ]

1 голос
/ 29 июня 2019

Вы можете следовать этому примеру из Пакетных документов AppSync :

#set($ids = [])
#foreach($id in ${ctx.args.ids})
    #set($map = {})
    $util.qr($map.put("id", $util.dynamodb.toString($id)))
    $util.qr($ids.add($map))
#end

{
    "version" : "2018-05-29",
    "operation" : "BatchGetItem",
    "tables" : {
        "Posts": {
            "keys": $util.toJson($ids),
            "consistentRead": true
        }
    }
}

Так что для вашего случая это должно выглядеть так:

#set ($batchDeleteArray = [])
#foreach( $item in $ctx.result.items )
  #set ($entry = {
    "Id": $util.dynamodb.toString($item.Id),
    "Sk": $util.dynamodb.toString($item.Sk)
  })

  $util.qr($batchDeleteArray.add($entry))
#end

{
    "version" : "2018-05-29",
    "operation" : "BatchDeleteItem",
    "tables" : {
        "TableName": {
          "keys": $util.toJson($batchDeleteArray)
        }
    }
}
1 голос
/ 18 марта 2019

Вы можете создать карту / словарь, который близок к нужному вам объекту JSON. Здесь есть руководство по программированию , в котором должна быть нужная вам информация, но, по сути, вам нужно что-то вроде этого.

#set($deleteObject={
     "Id" : $util.dynamodb.toString("nodelete"),
     "Sk" : $util.dynamodb.toString("nodelete")
})
...