如何处理JSON中的换行符?
时间:2020-03-05 18:47:08 来源:igfitidea点击:
我生成了一些JSON,并尝试将其拉入JavaScript中的对象。我不断出错。这是我所拥有的:
var data = '{"count" : 1, "stack" : "sometext\n\n"}'; var dataObj = eval('('+data+')');
这给我一个错误:
unterminated string literal
使用JSON.parse(data)
,我会看到类似的错误消息:Chrome中的" Unexpected token?`"和Firefox和IE中的" unerminated stringliteral"。
当我在sometext
之后取出\ n
时,在两种情况下错误都消失了。我似乎无法弄清楚为什么\ n使eval和JSON.parse失败。
解决方案
回答
我想这就是你想要的:
var data = '{"count" : 1, "stack" : "sometext\n\n"}';
(我们需要对字符串中的" "进行转义(将其转换为双" "),否则它将成为JSON源中的换行符,而不是JSON数据。)
回答
我们可能需要查看此Cfunction以转义字符串:
http://www.aspcode.net/C-encode-a-string-for-JSON-JavaScript.aspx
public static string Enquote(string s) { if (s == null || s.Length == 0) { return "\"\""; } char c; int i; int len = s.Length; StringBuilder sb = new StringBuilder(len + 4); string t; sb.Append('"'); for (i = 0; i < len; i += 1) { c = s[i]; if ((c == '\') || (c == '"') || (c == '>')) { sb.Append('\'); sb.Append(c); } else if (c == '\b') sb.Append("\b"); else if (c == '\t') sb.Append("\t"); else if (c == '\n') sb.Append("\n"); else if (c == '\f') sb.Append("\f"); else if (c == '\r') sb.Append("\r"); else { if (c < ' ') { //t = "000" + Integer.toHexString(c); string t = new string(c,1); t = "000" + int.Parse(tmp,System.Globalization.NumberStyles.HexNumber); sb.Append("\u" + t.Substring(t.Length - 4)); } else { sb.Append(c); } } } sb.Append('"'); return sb.ToString(); }