【发布时间】:2021-08-10 05:42:15
【问题描述】:
更新:我发现这个问题是因为“字符串化”输出不包含空格或换行符,并且与原始 JSON 不同。
字符串化输出:
{"eventType":"Delivery","mail":{"timestamp":"2021-08-09T20:41:51.515Z","source":"removed@email.com","sourceArn":"arn:aws:ses:us-east-1:1234567890:identity/removed.com","sendingAccountId":"1234567890","messageId":"1123bfe-123123b12e12d2c212a-123b12c2e1123-213f312d32c123b","destination":["removedl@email.com"],"headersTruncated":false,"headers":[{"name":"From","value":"removed@email.com"},{"name":"To","value":"removed@email.com"},{"name":"Subject","value":"Test"},{"name":"MIME-Version","value":"1.0"},{"name":"Content-Type","value":"text/plain; charset=UTF-8"},{"name":"Content-Transfer-Encoding","value":"7bit"}],"commonHeaders":{"from":["removed@email.com"],"to":["removed@email.com"],"messageId":"1123bfe-123123b12e12d2c212a-123b12c2e1123-213f312d32c123b","subject":"Test"},"tags":{"ses:operation":["SendEmail"],"ses:configuration-set":["GenericLog"],"ses:source-ip":["123.123.123.123"],"ses:from-domain":["email.com"],"ses:caller-identity":["user1"],"ses:outgoing-ip":["234.234.234.234"]}},"delivery":{"timestamp":"2021-08-09T20:41:52.880Z","processingTimeMillis":1365,"recipients":["removed@email.com"],"smtpResponse":"250 2.6.0 <1123bfe-123123b12e12d2c212a-123b12c2e1123-213f312d32c123b@email.amazonses.com> [InternalId=11231247472, Hostname=CO6PR12MB5396.namprd12.prod.outlook.com] 12090 bytes in 0.214, 55.135 KB/sec Queued mail for delivery","reportingMTA":"a48-108.smtp-out.amazonses.com"}}
原文:
我想从键名中删除 : 并将其替换为以下 JSON 中的 _。 (在tags 部分)
{
"eventType": "Delivery",
"mail": {
"timestamp": "2021-08-09T20:41:51.515Z",
"source": "removed@email.com",
"sourceArn": "arn:aws:ses:us-east-1:1234567890:identity/removed.com",
"sendingAccountId": "1234567890",
"messageId": "1123bfe-123123b12e12d2c212a-123b12c2e1123-213f312d32c123b",
"destination": [
"removedl@email.com"
],
"headersTruncated": false,
"headers": [
{
"name": "From",
"value": "removed@email.com"
},
{
"name": "To",
"value": "removed@email.com"
},
{
"name": "Subject",
"value": "Test"
},
{
"name": "MIME-Version",
"value": "1.0"
},
{
"name": "Content-Type",
"value": "text/plain; charset=UTF-8"
},
{
"name": "Content-Transfer-Encoding",
"value": "7bit"
}
],
"commonHeaders": {
"from": [
"removed@email.com"
],
"to": [
"removed@email.com"
],
"messageId": "1123bfe-123123b12e12d2c212a-123b12c2e1123-213f312d32c123b",
"subject": "Test"
},
"tags": {
"ses:operation": [
"SendEmail"
],
"ses:configuration-set": [
"GenericLog"
],
"ses:source-ip": [
"123.123.123.123"
],
"ses:from-domain": [
"email.com"
],
"ses:caller-identity": [
"user1"
],
"ses:outgoing-ip": [
"234.234.234.234"
]
}
},
"delivery": {
"timestamp": "2021-08-09T20:41:52.880Z",
"processingTimeMillis": 1365,
"recipients": [
"removed@email.com"
],
"smtpResponse": "250 2.6.0 <1123bfe-123123b12e12d2c212a-123b12c2e1123-213f312d32c123b@email.amazonses.com> [InternalId=11231247472, Hostname=CO6PR12MB5396.namprd12.prod.outlook.com] 12090 bytes in 0.214, 55.135 KB/sec Queued mail for delivery",
"reportingMTA": "a48-108.smtp-out.amazonses.com"
}
}
我创建了一个由 AWS Kinesis 调用的 node.js Lambda 函数。它处理上述 JSON 并使用以下代码。我正在调试,所以我只是尝试搜索和替换字符串进行测试:
console.log('Loading function');
exports.handler = async (payload, context) => {
payload = JSON.stringify(payload);
payload = payload.replace(/".*:.*":/g, 'replaced');
console.log('Replaced payload:', payload);
};
我已经通过多个代码测试站点运行了正则表达式,它正确地识别了所有 6 次出现的带有 : 的键名。我什至使用过this 测试器,它按预期正确替换了所有6 个字符串。但是,当它在 Lambda 上运行时,我得到以下输出:
Replaced payload: {replaced"a48-108.smtp-out.amazonses.com"}}
我是否遗漏了一些明显的东西,或者这是 Lambda 中发生的一些奇怪的事情?
注意,如果我只是输出未修改的 payload 变量,它会匹配输入 JSON,所以这不是问题。
我有额外的代码,一旦我解决了这个谜题,应该可以成功完成这个任务。但是,如果您可以提供代码以将键名中的 : 替换为 _,那也很棒。
【问题讨论】:
标签: node.js replace aws-lambda