如何处理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(); 
}