首页 > 解决方案 > 将字符串表达式转换为 JS 对象(不是 JSON)

问题描述

我在 contenteditable div 中有这样的表达式:

{
    name : "Jeff",
    job : "rat whacker"
}

我怎样才能把它变成一个 JS 对象?

如果我从 div 中获取字符串:

$("div").text();

...我明白了:

"{\n    name: \"Jeff\",\n    job: \"rat whacker\"\n}"

显然 JSON.parse 不起作用,因为这不是有效的 JSON。如何将其作为文本获取,然后将其分配给常规 JSON 对象:

{
    name : "Jeff",
    job : "rat whacker"
}

标签: javascriptobject

解决方案


请注意,您要做的最后一件事是信任他人。如果您允许任意代码执行,就会有人滥用您的网站,所以让这成为不可能:编写代码,在用户输入被允许进入下一步之前验证用户输入。

要么从你的 div 中获取 textContent,重写它以使其成为有效的 JSON,然后解析该 JSON(奖励:JSON.parse如果输入无法解析,则会自动抛出错误,因此你可以编写一个非常简单的字符串替换,适用于您想要的输入类型,同时为其他任何内容产生错误的 JSON,并且该JSON.parse函数只会拒绝错误的输入),或者使用设置为丢弃任何活动内容的 JS 解析器将文本字符串逐字解析为 JS(function,粗箭头符号,执行运算符等)。如果您只想允许像您所显示的那样进行简单输入,那么编写自己的简单且有限的 JS 解析器需要一点工作,但可能绰绰有余。


推荐阅读