gpt4 book ai didi

amazon-web-services - AWS API 网关响应正文模板映射(foreach)

转载 作者:行者123 更新时间:2023-12-05 08:11:50 25 4
gpt4 key购买 nike

我正在尝试通过 API 网关代理的 firehose 将数据保存在 S3 中。我已经创建了一个 API 网关端点,它使用 AWS 服务集成类型和用于 firehose 的 PutRecord 操作。我有映射模板作为

{
"DeliveryStreamName": "test-stream",
"Records": [
#foreach($elem in $input.path('$.data'))
{
"Data": "$elem"
}
#if($foreach.hasNext),#end
#end
]
}

现在,当我使用以下 JSON 测试端点时

{ 
"data": [
{"ticker_symbol":"DemoAPIGTWY","sector":"FINANCIAL","change":-0.42,"price":50.43},{"ticker_symbol":"DemoAPIGTWY","sector":"FINANCIAL","change":-0.42,"price":50.43}
]
}

JSON被修改,转换后如下图

{ticker_symbol=DemoAPIGTWY, sector=FINANCIAL, change=-0.42, price=50.43}

:正在转换为 = 这不是有效的 JSON

不知道是不是上面的映射模板有问题

最佳答案

问题是,$input.path() 返回一个 json 对象,而不是 json 的字符串化版本。你可以看看文档here .

Data 属性期望值是一个字符串而不是一个 json 对象。长话短说——目前没有内置函数可以将 json 对象还原为其字符串化版本。这意味着您需要通过 $input.json() 重新读取循环中的当前元素。这将返回元素的 json 字符串表示,然后您可以将其添加为数据。

看看答案here这说明了这个概念。

在您的情况下,应用上面链接中描述的概念将产生如下映射:

    {
"DeliveryStreamName": "test-stream",
"Records": [
#foreach($elem in $input.path('$.data'))
{
#set($json = $input.json("$[$foreach.index]"))
"Data":"$util.base64Encode($json)",
}
#if($foreach.hasNext),#end
#end
]
}

关于amazon-web-services - AWS API 网关响应正文模板映射(foreach),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48893224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com