【问题标题】:Create object from object literal string从对象文字字符串创建对象
【发布时间】:2018-10-29 23:16:39
【问题描述】:

有没有一种简单的方法可以将对象字面量作为字符串解析为新对象?

我正在寻找如下所示的字符串:

'{ name: "A", list: [] }'

变成这样的对象:

{ name: 'A', list: [] }

注意:

我不是在寻找 JSON.parse(),因为它接受 json 字符串而不是对象文字字符串。我希望eval 能工作,但不幸的是它没有。

【问题讨论】:

标签: javascript node.js


【解决方案1】:

eval 确实有效,只需稍作调整:问题在于独立行

{ name: 'A', list: [] }

作为解释器被解析为块的开始,而不是作为对象字面量的开始。因此,就像隐式返回对象的箭头函数需要在对象周围加上括号:

arr.map(item => ({ item }))

您需要在输入字符串周围加上括号,以便将里面的内容(即以{开头的对象)正确解析为表达式:

const input = '{ name: "A", list: [] }';
const obj = eval('(' + input + ')');
console.log(obj);

当然,与涉及eval 的所有情况一样,您首先应该非常确定输入是可信的。

【讨论】:

    【解决方案2】:

    虽然我永远不会做这个 IRL,但你也许可以试试这个:

    var myObjLiteralString = '{ name: "A", list: [] }';
    
    var myObj;
    eval('myObj = ' + myObjLiteralString);
    
    console.log(myObj);
    

    【讨论】:

      猜你喜欢
      • 2015-09-08
      • 2015-08-19
      • 1970-01-01
      • 2013-03-25
      • 1970-01-01
      • 2019-02-09
      • 2019-07-30
      • 2022-01-22
      相关资源
      最近更新 更多