javascript - 将字符串表达式转换为 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"
}
解决方案
请注意,您要做的最后一件事是信任他人。如果您允许任意代码执行,就会有人滥用您的网站,所以让这成为不可能:编写代码,在用户输入被允许进入下一步之前验证用户输入。
要么从你的 div 中获取 textContent,重写它以使其成为有效的 JSON,然后解析该 JSON(奖励:JSON.parse
如果输入无法解析,则会自动抛出错误,因此你可以编写一个非常简单的字符串替换,适用于您想要的输入类型,同时为其他任何内容产生错误的 JSON,并且该JSON.parse
函数只会拒绝错误的输入),或者使用设置为丢弃任何活动内容的 JS 解析器将文本字符串逐字解析为 JS(function
,粗箭头符号,执行运算符等)。如果您只想允许像您所显示的那样进行简单输入,那么编写自己的简单且有限的 JS 解析器需要一点工作,但可能绰绰有余。
推荐阅读
- react-native - 如何在本机反应中对齐多行文本
- java - Java 8 可选。为什么of和ofNullable?
- google-cloud-memorystore - 谷歌云内存存储和谷歌 AppEngine 标准与 python 3
- ios - 如何将发布请求发送到 Firebase 功能?
- javascript - Reactjs:如何更新 reactjs 中的投票计数
- javascript - 将缓冲区输入中的音频从 48000 下采样到 16000
- html - 使用 css 缩小和增长元素
- azure-ad-b2c - AD B2C 加强认证
- javascript - 根据输入值删除禁用属性
- javascript - 如何在 catch 语句之外拒绝异步/等待?