Node.js stringify()一个字符串,它是实际的NodeJS代码

Node.js stringify()一个字符串,它是实际的NodeJS代码,node.js,Node.js,我正在NodeJS中使用Readline模块,希望将用户编写的内容解析为代码。意思是如果有人写: { name: "David", age: 34 } 我应该能够JSON.stringify(content)并获得: { "name": "David", "age": "34" } 如何将字符串转换为实际代码,以便将其解释为JavaScript对象,从而使用JSON.stringify()将其转换为JSON?您的问题并不完全清楚,但是JSON.parse()能

我正在NodeJS中使用Readline模块,希望将用户编写的内容解析为代码。意思是如果有人写:

{
    name: "David",
    age: 34
}
我应该能够
JSON.stringify(content)
并获得:

{
    "name": "David",
    "age": "34"
}

如何将字符串转换为实际代码,以便将其解释为JavaScript对象,从而使用
JSON.stringify()
将其转换为JSON?

您的问题并不完全清楚,但是
JSON.parse()
能帮到您吗?如果输入不是有效的JSON,您需要将其包装在try catch中


您的问题还不完全清楚,但是
JSON.parse()
能帮您吗?如果输入不是有效的JSON,您需要将其包装在try catch中


实现这一点的诀窍是以未记录的方式使用VM模块,如下所示

let vm = require('vm');

let script = new vm.Script('x = ' + full_content);

let sandbox = script.runInThisContext();

converted = JSON.stringify(sandbox);
基本上,您必须创建一个保存字符串(JavaScript)的变量,然后通过
.runInThisContext()
将其转换为正确的JavaScript代码

在这种情况下,
x
变量将“消失”,您无需考虑这一点。但是如果您遵循NodeJS文档,并使用
.runInNewContext()
,那么x变量不会消失,a您可以将对象(至少在我的情况下)分配给
x
变量


希望这有帮助:)

实现这一点的诀窍是以未记录的方式使用VM模块,如下所示

let vm = require('vm');

let script = new vm.Script('x = ' + full_content);

let sandbox = script.runInThisContext();

converted = JSON.stringify(sandbox);
基本上,您必须创建一个保存字符串(JavaScript)的变量,然后通过
.runInThisContext()
将其转换为正确的JavaScript代码

在这种情况下,
x
变量将“消失”,您无需考虑这一点。但是如果您遵循NodeJS文档,并使用
.runInNewContext()
,那么x变量不会消失,a您可以将对象(至少在我的情况下)分配给
x
变量



希望这有帮助:)

o有点困惑;)很清楚我在问什么,最后有一个问题(我可能听错了)。无论如何,
JSON.parse()
用于将JSON转换为JavaScript对象。我的问题是,我键入的内容被格式化为JavaScript对象。但是process.stdin返回的是ASCII而不是JavaScript。不知道该怎么说:(希望这现在更有意义。好吧,我想这就清楚了。如果您的输入是字符串,JSON.parse()会将其转换为JavaScript对象。但我在这里看到的是,您的输入不是有效的JSON(在属性名周围缺少引号)。正如您所说的,JSON.stringify()将一个JavaScript对象作为输入并输出一个字符串。在这种情况下,由于您的输入不是JSON,它将不会像您期望的那样工作。Tru,这是一个输入错误。已修复。但我认为我找到了解决方案。我会在稍后发布它。o_o有点困惑;)很清楚我在问什么,最后会有一个问题(我可能听错了)。无论如何,
JSON.parse()
用于将JSON转换为JavaScript对象。我的问题是,我键入的内容被格式化为JavaScript对象。但是process.stdin返回的是ASCII而不是JavaScript。不知道该怎么说:(希望这现在更有意义。好吧,我想这就清楚了。如果您的输入是字符串,JSON.parse()会将其转换为JavaScript对象。但我在这里看到的是,您的输入不是有效的JSON(在属性名周围缺少引号)。正如您所说的,JSON.stringify()将一个JavaScript对象作为输入并输出一个字符串。在本例中,假设您的输入不是JSON,它将不会像您预期的那样工作。Tru,这是一个拼写错误。已修复。但我认为我找到了解决方案。我将稍后发布。感谢您从屏幕开始并尝试跳出框:D ps。如果您认为这是一个好答案,a+将是nice;)和person类型
(function(){x=0;while(true)x++;})(
它会杀死虚拟机吗?他们的机器会得到蠕虫,适合漫长而黑暗的冬夜;)可以设置超时以避免无限循环。使用VM有几种处理错误的方法。感谢您从屏幕开始并尝试跳出框框:D ps。如果您认为这是一个好答案,a+会很好;)这个人输入
(function(){x=0;while(true)x++;})(
它会杀死虚拟机吗?他们的机器会得到蠕虫,适合长时间和黑暗的冬夜;)可以设置超时以避免无限循环。有几种使用VM处理错误的方法。您可以让它们键入有效的JSON,这样您就不必计算字符串了吗?规避不受信任的代码可能是不安全的……我正在构建一个命令行工具,因此,除非用户想要停止自己的机器,否则欢迎用户这样做:PStill似乎更容易只需要有效的JSON。该工具的目的是将JS对象转换为JSON,你知道,如果你有大而复杂的对象,你不必手动完成。计算机(FTW;)那么也许是图书馆?或者正则表达式:我知道在浏览器中做新的函数hack来转换对象。。。只是提供其他想法。你能让他们输入有效的JSON,这样你就不必计算字符串了吗?规避不受信任的代码可能是不安全的……我正在构建一个命令行工具,因此,除非用户想要停止自己的机器,否则欢迎用户这样做:PStill似乎更容易只需要有效的JSON。该工具的目的是将JS对象转换为JSON,你知道,如果你有大而复杂的对象,你不必手动完成。计算机(FTW;)那么也许是图书馆?或者正则表达式:我知道在浏览器中做新的函数hack来转换对象。。。只是提出其他想法。