Javascript 正在分析包含函数到对象的字符串

Javascript 正在分析包含函数到对象的字符串,javascript,Javascript,我想分析这个字符串: var str1 = `{ sayHello: function() { console.log('hello'); }, content: "I'm a content", }`; 并将其转换为: var str2 = { sayHello: function() { console.log('hello'); }, content: "I'm a content", }; 我已经测试了JSON.parse(str1),但它不起

我想分析这个字符串:

var str1 = `{
  sayHello: function() {
    console.log('hello');
  },
  content: "I'm a content",
}`;
并将其转换为:

var str2 = {
  sayHello: function() {
    console.log('hello');
  },
  content: "I'm a content",
};

我已经测试了JSON.parse(str1),但它不起作用,eval(str1)也是一样。有什么想法吗?

你可以使用
eval

var str1=`var obj={
sayHello:function(){
log('hello');
},
内容:“我是一个内容”,
}`;
eval(str1);

obj.sayHello()您的字符串不是有效的javascript,否则它将与eval一起工作。问题是第一个
{
被解释为代码块,而不是对象的开始

这一点可以用eval来解释:

`({
  sayHello: function() {
    console.log('hello');
  },
  content: "I'm a content",
})`;
或者您可以直接尝试解析整个字符串,包括声明。但是,它在严格模式下无法工作

`var str1 = {
  sayHello: function() {
    console.log('hello');
  },
  content: "I'm a content",
}`

正如评论所建议的那样,我非常确定有更好的方法来完成您正在尝试的工作,您不必评估随机js代码。

JSON.parse(str1)
不起作用,因为这不是json。
eval
应该起作用,但由于这是在不同的范围内,你不会从外部看到
str1
。最好的解决方案几乎可以肯定是“重新设计系统,这样你就不会首先传递字符串化的函数”.Quentin是对的。如果你必须通过json将函数作为字符串传递,那么你绝对是在做不应该做的事情。应该避免使用Eval。这会使调试变得困难,使代码更容易受到攻击,而且理论上会更慢,因为Eval代码不会被缓存。这个想法是要用一个字符串替换一个js对象我是数据库,所以我别无选择