JSON.parse()中的错误(当从API网关中调用时)
问题描述:
我正在使用AWS lambda + API网关,并且需要在URL(GET方法)中为REST调用传递一个数字数组。看起来好的方法是将数字作为字符串(逗号分隔)传递,然后使用JSON.parse转换为数组数组。JSON.parse()中的错误(当从API网关中调用时)
以下是我使用的AWS lambda代码;
exports.handler = (event, context, callback) => {
var arr = JSON.parse('[' + event.numbers + ']');
console.log("array: " + arr);
// TODO implement
callback(null, 'Hello from Lambda');
};
我使用此Input输入测试事件在AWS Lambda中测试此函数;
{
"numbers": "1,5"
}
而且一切都按预期工作;没有错误。但是,当我通过API网关测试它,并在查询中传递数字作为字符串时,我得到以下错误(通过CloudWatch观察);
*19:19:02
START RequestId: eabab882-8cee-11e7-8e2f-79d3086e061f Version: $LATEST
19:19:02
2017-08-29T19:19:02.688Z eabab882-8cee-11e7-8e2f-79d3086e061f SyntaxError: Unexpected token u in JSON at position 1 at Object.parse (native) at exports.handler (/var/task/index.js:4:20)
19:19:02
END RequestId: eabab882-8cee-11e7-8e2f-79d3086e061f
19:19:02
REPORT RequestId: eabab882-8cee-11e7-8e2f-79d3086e061f Duration: 215.25 ms Billed Duration: 300 ms Memory Size: 128 MB Max Memory Used: 18 MB
19:19:02
RequestId: eabab882-8cee-11e7-8e2f-79d3086e061f Process exited before completing request*
这是传递给lambda的请求,如日志所示;
"body-json" : {},
"params" : {
"path" : {
}
,"querystring" : {
"numbers" : "1,6"
}
,"header" : {
}
},
"stage-variables" : {
},
我找不出什么问题,因为我在两种情况下都传递了相同的字符串。
我将不胜感激任何帮助。
感谢 格斯
答
有了这个输入JSON通知,你需要得到这样的:
var arr = JSON.parse('[' + event.params.querystring.numbers + ']');
而不是:
var arr = JSON.parse('[' + event.numbers + ']');
或进行身体映射模板留你想要的方式:
{ "number": "$input.params('number')" }
我希望我帮助过!