2

我无法让 JSON.parse 将字符串转换为对象,我发现这段代码可以解决我的问题 - 但是,我无法弄清楚它是如何工作的。如果有人可以(向 JavaScript 初学者)解释第 3 行发生了什么,我将不胜感激。谢谢你。

var str, obj;
str = "{src:'img/testimage.jpg', coord:{x:17, y:39}, width:200, height:200}";
obj = new Function('return '+str)();
4

4 回答 4

3

它使用您的字符串作为函数的主体创建一个函数,但return在它前面,然后运行该函数。结果是评估您的字符串并返回它创建的对象。

它与执行此操作基本相同,但您以编程方式创建函数:

function f() {
   return {src:'img/testimage.jpg', coord:{x:17, y:39}, width:200, height:200};
}

obj = f();

仅供参考,JSON.parse()不起作用,因为您的字符串是有效的 Javascript,但不是有效的 JSON。要使其成为有效的 JSON,还必须引用所有属性名称。


这将是有效的 JSON:

var str = '{"src":"img/testimage.jpg", "coord":{"x":17, "y":39}, "width":200, "height":200}'
于 2015-10-26T19:47:58.670 回答
0

无法让 JSON.parse 将字符串转换为对象

可以尝试用双引号.replace()替换单引号,在输入字符串之前为属性名称添加双引号,然后调用结果字符串'"":"JSON.parse()

var str = "{src:'img/testimage.jpg', coord:{x:17, y:39}, width:200, height:200}";
var obj = str.replace(/'/g, "\"").replace(/(\w+)(?=:)/g, "\"$1\"");
console.log(JSON.parse(obj))

于 2015-10-26T20:05:09.170 回答
0

为了完整起见,请注意,如果您认为某些内容为 JSON,您只是想将其硬编码到 JavaScript 源代码中,则根本不需要任何 JSON 解析:

var obj = {src:'img/testimage.jpg', coord:{x:17, y:39}, width:200, height:200};

很好。

于 2015-10-26T20:09:28.810 回答
0

您可以使用调试器窗口查看发生了什么。最后一行只是返回一个对象。

在此处输入图像描述

于 2015-10-26T19:54:08.577 回答