我已经生成了一些JSON,我试图把它拉到一个对象在JavaScript。我总是出错。以下是我所拥有的:

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

这给了我一个错误:

unterminated string literal

使用JSON.parse(data),我看到类似的错误消息:在Chrome中“意外的令牌()”,在Firefox和IE中“未终止的字符串文字”。

当我在sometext后面去掉\n时,两种情况下错误都消失了。我似乎不明白为什么\n使eval和JSON。解析失败。


当前回答

这是你想要的:

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

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

其他回答

好吧,当它可以简单地用1个CSS类完成时,真的没有必要为此创建一个函数。

只要把你的文本围绕这门课,就能看到神奇的地方:D

 <p style={{whiteSpace: 'pre-line'}}>my json text goes here \n\n</p>

注意:因为你总是在HTML的前面显示你的文本,你可以添加style={{whiteSpace: 'pre-line'}}到任何标签,而不仅仅是p标签。

例如,您可以在写入JSON字段值时在服务器上转义字符串,在客户机浏览器中检索值时取消转义。

所有主流浏览器的JavaScript实现都有unescape命令。

例子:

服务器端:

response.write "{""field1"":""" & escape(RS_Temp("textField")) & """}"

在浏览器中:

document.getElementById("text1").value = unescape(jsonObject.field1)

你可能想看看这个c#函数来转义字符串:

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(); 
} 

正如我理解你的问题,这不是关于解析JSON,因为你可以直接复制粘贴你的JSON到你的代码-所以如果是这种情况下,然后直接复制你的JSON到dataObj变量,而不包装它与单引号(提示:eval==evil)

var dataObj = {“count” : 1, “stack” : “sometext\n\n”}; console.log(dataObj);

这是你想要的:

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

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