如何在AWS API Gateway中将对象转换为JSON?

问题描述 投票:0回答:2

我有一些简单的数据想要使用 API Gateway 进行转换:

{
    "data": [
        {"id":"1", "name":"Foo"},
        {"id":"2", "name":"Bar"},
        {"id":"3", "name":"Dead"},
        {"id":"4", "name":"Beef"}
    ]
}

我能够循环数据:

#foreach($elem in $input.path('$.data'))
    {
       "Data": $elem,
       "Foo": "Bar"
    }#if($foreach.hasNext),#end
#end

预期结果是:

{"Data": {"id":"1", "name":"Foo"}, "Foo": "Bar"},
{"Data": {"id":"2", "name":"Bar"}, "Foo": "Bar"},
{"Data": {"id":"3", "name":"Dead"}, "Foo": "Bar"},
{"Data": {"id":"4", "name":"Beef"}, "Foo": "Bar"}

然而,实际结果是:

{"Data": {id=1, name=Foo}, "Foo": "Bar"},
{"Data": {id=2, name=Bar}, "Foo": "Bar"},
{"Data": {id=3, name=Dead}, "Foo": "Bar"},
{"Data": {id=4, name=Beef}, "Foo": "Bar"}

$elem
产生
{id=1, name=Foo}
,这似乎是对象被字符串化的结果。我想以 JSON 格式保存它,如何实现?

我尝试过

$elem.stringify()
$input.json($elem)
$elem.json()
,但这不起作用。

amazon-web-services mapping aws-api-gateway apache-velocity
2个回答
4
投票

我想出了一个奇怪的解决方法,阅读有关

$index
以及 Apache Velocity 的工作原理:

#foreach($elem in $input.path('$.data'))
    #set($pathBegin = "$.data[")
    #set($pathEnd = "]")
    #set($currentIndex = $foreach.index)
    #set($thePath = "$pathBegin$currentIndex$pathEnd")
    #set($elemJson = $input.json($thePath)) 
  {
    "Data": $elemJson,
    "Foo": "Bar"
  }#if($foreach.hasNext),#end
#end

这可能会更优化,但它实际上可以工作并打印出预期的结果。


0
投票

对 Mikael Dúi Bolinder 上瘾

如果你需要 JSON Stringyfy

只需使用

"$util.escapeJavascript($elemJson)"
© www.soinside.com 2019 - 2024. All rights reserved.