javascript - 我得到一个对象作为字符串。如何转换?
问题描述
使用IMAP我收到一封电子邮件。
但是解析,我得到了这个:
{
from: [ "name lastname <mygmail@gmail.com>" ],
date: [ "Mon, 21 Jun 2021 13:41:51 +0500" ],
subject: [ "hello" ]
}
问题是这是一个string
,根本不是一个对象!
我不能利用这一点。如何将此字符串转换为对象?
JSON.parse()
抛出错误消息:
UnhandledPromiseRejectionWarning: SyntaxError: Unexpected token f in JSON at position 141
解决方案
正如其他人所指出的,因为这不是 JSON,所以您不能将其解析为 JSON。它看起来确实是一个 JavaScript 片段。
过去eval(customJavaScriptCode)
会用于此,但它非常不安全,因此请避免使用它。
一种更好、更安全(但不是防弹)的方法是在沙盒环境中运行 JavaScript。很难摆脱它。你这样做是这样的:
- 为您的对象添加前缀
result =
,名称并不重要。 - 在沙箱中执行 JavaScript。
- 获取最后一条语句的值。
const vm = require('vm');
const script = new vm.Script('result = ' + `{
from: [ "name lastname <mygmail@gmail.com>" ],
date: [ "Mon, 21 Jun 2021 13:41:51 +0500" ],
subject: [ "hello" ]
}`);
const lastStatementResult = script.runInNewContext();
console.log(lastStatementResult.subject[0] == "hello");
您现在以相对安全的方式将对象解析为 JS。
如果您需要的不仅仅是最后一条语句,您可以这样做:
const vm = require('vm');
const script = new vm.Script(`
var foo = "bar";
var baz = foo + "123";
`);
const context = {}; // will contain global variables from the script
script.runInNewContext(context);
console.log(context.foo + '123' === context.baz);
推荐阅读
- nginx - NGINX:当 404 时,尝试使用前缀相同的 URL
- angular - 在停止调试时终止 vs 代码中的 ng serve 任务
- python - 如何在 DEAP 中设置个体基因的上限和下限?
- sql - SQL Server JSON 查询过滤返回
- mysql - 如何使用连接包含一个完整的列
- angular - 如何测试一个复杂的可观察链?
- twilio - 使用 Authy API 时,有没有办法为用户更新 OTP 密码?
- ruby - 使用 CL var 执行哈希查找
- python - 在python中实现if语句后如何继续
- bootstrap-4 - 导航栏切换器在重定向到新页面时不会折叠