【发布时间】:2015-10-22 12:32:11
【问题描述】:
我正在尝试确保用户的输入在提交到服务器之前转换为有效的 JSON 字符串。
我所说的“转换”是转义字符,例如“\n”和“””。
顺便说一句,我正在从 HTML textarea 获取用户输入。
将用户输入转换为有效的 JSON 字符串对我来说非常重要,因为它将被发布到服务器并以 JSON 格式发送回客户端。 (无效的 JSON 字符串会使整个响应无效)
如果用户输入了
你好新世界,
我的名字叫“好极了”。
在 HTML <textarea>,
var content = $("textarea").val();
内容将包含换行符和双引号字符。
服务器和数据库处理和存储数据不是问题。
我的问题发生在服务器将客户端发布的数据以 JSON 格式发回给他们时。
让我通过一些我的服务器响应的例子来进一步澄清它。 这是一个 JSON 响应,看起来像这样
{ "code": 0, "id": 1, "content": "USER_POSTED_CONTENT" }
如果USER_POSTED_CONTENT 包含换行符“\n”、双引号或任何必须转义但未转义的字符,则它不再是有效的 JSON 字符串,客户端的 JavaScript 引擎无法解析数据。
所以我试图确保客户端提交的是有效的 JSON 字符串。
这是我做了一些研究后得出的结论。
String.prototype.escapeForJson = function() {
return this
.replace(/\b/g, "")
.replace(/\f/g, "")
.replace(/\\/g, "\\")
.replace(/\"/g, "\\\"")
.replace(/\t/g, "\\t")
.replace(/\r/g, "\\r")
.replace(/\n/g, "\\n")
.replace(/\u2028/g, "\\u2028")
.replace(/\u2029/g, "\\u2029");
};
我使用这个函数来转义所有需要转义的字符,以便创建有效的 JSON 字符串。
var content = txt.val().escapeForJson();
$.ajax(
...
data:{ "content": content }
...
);
但是...看来str = JSON.stringify(str); 做了同样的工作!
但是,在阅读了 JSON.stringify 的真正用途后,我感到很困惑。上面写着JSON.stringify是把JSON对象转成字符串。
我并没有真正将 JSON 对象转换为字符串。
所以我的问题是...
使用JSON.stringify 将用户输入转换为有效的 JSON 字符串对象完全可以吗??
更新:
JSON.stringify(content) 效果很好,但它在开头和结尾添加了双引号。我不得不手动删除它以满足我的需要。
【问题讨论】:
标签: javascript json string