我试图确保来自用户的输入在提交给服务器之前已转换为有效的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)运作良好,但在开头和结尾都添加了双引号。而且我不得不手动删除它以满足我的需要。
是的,完全可以。您无需重新发明已经存在的内容,并且您的代码将对其他开发人员更有用。
编辑:您可能想使用object而不是一个简单的字符串,因为您想发送一些其他信息。
例如,您可能希望发送另一个输入的内容,该内容将在以后开发。
如果不添加json2.js,目标浏览器为IE7或更低版本,则不应使用stringify。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句