Я передаю строку json шлюзу API, который затем требуется изменить и передать нескольким другим лямбдам. Требуется скрыть некоторую информацию от пользователя и упростить ввод, поэтому мне нужно использовать VTL для ее преобразования.
Вход Json:
{
"name": "black_hole",
"file_type": "text",
"file_name": "lecture_slides"
}
Требуемый вывод JSON в лямбды:
{
"product": "strategy",
"sub_product": "experts",
"content": {
"method": "POST",
"org_name": "physoc",
"topic": "physics",
"category": "training",
"name": "black_hole",
"file_type": "text",
"file_name": "lecture_notes"
}
}
Вот мои VTL-попытки выполнить преобразование, приведенное ниже .
#set($data = $input.json('$'))
{
"product": "strategy",
"sub_product": "experts",
"content": {
"method": "$util.urlEncode($context.httpMethod)",
"expert": "$util.urlEncode($method.request.path.org_name)",
"topic": "$util.urlEncode($method.request.path.topic)",
"category": "training",
"name": "$util.urlEncode($input.json('$.name'))",
"file_type": "$util.urlEncode($method.request.body.file_type)",
"file_name": "$util.urlEncode($data.name)"
}
}
VTL, который я написал для полей name, file_type, file_name
, но все они отображаются пустыми:
{
'method': 'POST',
'expert': 'expert_name',
'topic': 'topic',
'category': 'training',
'name': '',
'file_type': '',
'file_name': ''
}
Я могу получить весь ввод, но не могу извлечь переменные из $input.json('$')
строка:
'%22%7B%5C%22name%5C%22%3A+%5C%22black_hole%5C%22%2C+%5C%22file_type%5C%22%3A+%5C%22text%5C%22%2C+%5C%22file_name%5C%22%3A+%5C%22lecture_notes%5C%22%7D%22'
Что я делаю не так?