当前位置:  开发笔记 > 编程语言 > 正文

如何处理JSON中的换行符?

如何解决《如何处理JSON中的换行符?》经验,为你挑选了3个好方法。

我已经生成了一些JSON,我试图将它拉入JavaScript中的对象.我一直在收到错误.这就是我所拥有的:

var data = '{"count" : 1, "stack" : "sometext\n\n"}';
var dataObj = eval('('+data+')');

这给了我一个错误:

unterminated string literal

有了JSON.parse(data),我看到类似的错误消息:Unexpected token ?Chrome中的" unterminated string literal"和Firefox和IE中的" ".

当我取出\nsometext,错误消失了两种情况.我似乎无法弄清楚为什么\n制造evalJSON.parse失败.



1> BlaM..:

我想这就是你想要的:

var data = '{"count" : 1, "stack" : "sometext\\n\\n"}';

(您需要转义字符串中的"\"(将其转换为双 - "\"),否则它将成为JSON源中的换行符,而不是JSON数据.)


这当然是正确的,但我想补充说明这一点的原因:http://www.ietf.org/rfc/rfc4627.txt中的JSON规范在第2.5节中包含了这句话:"所有Unicode除了必须转义的字符外,字符可以放在引号内:引号,反向固定和控制字符(U + 0000到U + 001F)." 由于换行符是控制字符,因此必须对其进行转义.

2> manish_s..:

你需要有它取代的功能\n\\n的情况下,data是不是一个字符串文字.

function jsonEscape(str)  {
    return str.replace(/\n/g, "\\\\n").replace(/\r/g, "\\\\r").replace(/\t/g, "\\\\t");
}

var data = '{"count" : 1, "stack" : "sometext\n\n"}';
var dataObj = JSON.parse(jsonEscape(data));

结果dataObj将是

Object {count: 1, stack: "sometext\n\n"}


你需要转义转义字符(即`.replace("\\n","\\\\n")`)我还建议使用正则表达式来替换多个实例(即`.replace(/ \n)/g,"\\\\n")`)
为什么你需要逃脱逃脱字符?我的意思是`.replace("\n","\\n")``应该做得很好!! 例如,`var test = [{"description":"关于产品的一些描述.这可以是多行文本."}]; console.log(JSON.parse(test.replace(/ \n/g,"\\n")));`将对象完美地输出到浏览器控制台为`[{"description":"关于产品.\n这可以是多行文本."}]`

3> gavenkoa..:

根据规范:http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf

jsonStr = "{ \"name\": \"Multi\\nline.\" }";

所以你不能直接传递U+0022U+0022编码.这是被禁止的!规格建议使用的转义序列用于从一些明确定义的代码U+005CU+0000:

jsonStr = "{ \"name\": \"Multi\\nline.\" }";

由于大多数编程语言都U+001F用于引用,你应该转义转义语法(双转义 - 一次用于语言/平台,一次用于Json本身):

jsonStr = "{ \"name\": \"Multi\\nline.\" }";

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有