[英]Unable to pass nodejs variable into JSON string
How can I pass sns_NameSpace
variable into the payload
?如何将
sns_NameSpace
变量传递到payload
? I'm getting the error Unrecognized token sns_NameSpace
.我收到错误
Unrecognized token sns_NameSpace
。 I tried to stringfy using JSON and yet still I get the same error.我尝试使用 JSON 进行字符串化,但仍然出现相同的错误。
Error:
"errorMessage": "Could not parse request body into json: Could not parse payload into json: Unrecognized token 'sns_NameSpace': was expecting (JSON String, Number, Array, Object or token 'null', 'true' or 'false')\n at [Source: (byte[])\"{ \"Host\": sns_NameSpace, \"Key\": sns_key, \"Value\": \"1\"}\"; line: 1, column: 25]",
code:
var sns_NameSpace = sns.Trigger.Namespace;
var sns_NameSpace = JSON.stringify(sns_NameSpace.replace("/", "_"));
var sns_key = JSON.stringify(sns_ApiId + '_' + sns_MetricName);
var params = {
FunctionName: 'zabbixPy', // the lambda function we are going to invoke
InvocationType: 'RequestResponse',
LogType: 'Tail',
Payload: '{ "Host": sns_NameSpace, "Key": sns_key, "Value": "1"}'
};
Assuming you have a valid string you should be able to use template literals for this.假设您有一个有效的字符串,您应该能够为此使用模板文字。
EX:前任:
var params = {
...
Payload: `{ "Host": ${sns_NameSpace}, "Key": ${sns_key}, "Value": "1"}`
};
Also, I'd recommend using different variable names instead of defining, then re-defining sns_nameSpace
.另外,我建议使用不同的变量名称而不是定义,然后重新定义
sns_nameSpace
。
This question should be renamed "How do I concatenate a variable and a string?".这个问题应该重命名为“如何连接变量和字符串?”。 The issue is on your "Payload" line.
问题出在您的“有效负载”线上。
Here is the string that is not working:这是不起作用的字符串:
'{ "Host": sns_NameSpace, "Key": sns_key, "Value": "1"}'
As you can see from the error message, sns_NameSpace
is not being replaced and so is being interpreted literally, as an invalid JSON token.正如您从错误消息中看到的,
sns_NameSpace
没有被替换,因此被逐字解释为无效的 JSON 令牌。
One can concatenate strings using the string concatenation operator ( + )可以使用字符串连接运算符( + )连接字符串
'{ "Host": ' + sns_NameSpace + ', "Key": ' + sns_key + ', "Value": "1"}'
Or can use template strings to as so:或者可以使用模板字符串这样:
`{ "Host": ${sns_NameSpace}, "Key": ${sns_key}, "Value": "1"}`
Please note that the template string uses ` (backtick), not ' (single quote)请注意模板字符串使用`(反引号),而不是'(单引号)
It would be a lot more straight-forward to build the object in JS and then stringify it, instead of stringifying individual parts and having literal JSON pieces in the string:在 JS 中构建对象然后将其字符串化会更直接,而不是将单个部分字符串化并在字符串中包含文字 JSON 片段:
var sns_NameSpace = sns.Trigger.Namespace;
var sns_NameSpace = JSON.stringify(sns_NameSpace.replace("/", "_"));
var sns_key = JSON.stringify(sns_ApiId + '_' + sns_MetricName);
var params = {
FunctionName: 'zabbixPy', // the lambda function we are going to invoke
InvocationType: 'RequestResponse',
LogType: 'Tail',
Payload: JSON.stringify({
Host: sns_NameSpace.replace('/', '_'),
Key: sns_ApiId + '_' + sns_MetricName,
Value: 1
})
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.