我已经生成了一些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。解析失败。


当前回答

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

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

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

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

其他回答

这是你想要的:

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

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

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

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

例子:

服务器端:

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

在浏览器中:

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

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

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

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

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

我使用这个函数来剥离数据中的换行符或其他字符来解析JSON数据:

function normalize_str($str) {

    $invalid = array(
        'Š'=>'S', 'š'=>'s',  'Đ'=>'Dj', 'đ'=>'dj', 'Ž'=>'Z', 'ž'=>'z',
        'Č'=>'C', 'č'=>'c',  'Ć'=>'C',  'ć'=>'c',  'À'=>'A', 'Á'=>'A', 'Â'=>'A', 'Ã'=>'A',
        'Ä'=>'A', 'Å'=>'A',  'Æ'=>'A',  'Ç'=>'C',  'È'=>'E', 'É'=>'E', 'Ê'=>'E', 'Ë'=>'E',
        'Ì'=>'I', 'Í'=>'I',  'Î'=>'I',  'Ï'=>'I',  'Ñ'=>'N', 'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O',
        'Õ'=>'O', 'Ö'=>'O',  'Ø'=>'O',  'Ù'=>'U',  'Ú'=>'U', 'Û'=>'U', 'Ü'=>'U', 'Ý'=>'Y',
        'Þ'=>'B', 'ß'=>'Ss', 'à'=>'a',  'á'=>'a',  'â'=>'a', 'ã'=>'a', 'ä'=>'a', 'å'=>'a',
        'æ'=>'a', 'ç'=>'c',  'è'=>'e',  'é'=>'e',  'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i',
        'î'=>'i', 'ï'=>'i',  'ð'=>'o',  'ñ'=>'n',  'ò'=>'o', 'ó'=>'o', 'ô'=>'o', 'õ'=>'o',
        'ö'=>'o', 'ø'=>'o',  'ù'=>'u',  'ú'=>'u',  'û'=>'u', 'ý'=>'y', 'ý'=>'y', 'þ'=>'b',
        'ÿ'=>'y', 'Ŕ'=>'R',  'ŕ'=>'r',
        "`" => "'", "´" => "'",  '"' => ',',  '`' => "'",
        '´' => "'", '"' => '\"', '"' => "\"", '´' => "'",
        "&acirc;€™" => "'",
        "{" => "",
        "~" => "",  "–" => "-",  "'" => "'",  "     " => " ");

    $str = str_replace(array_keys($invalid), array_values($invalid), $str);

    $remove = array("\n", "\r\n", "\r");
    $str = str_replace($remove, "\\n", trim($str));

    //$str = htmlentities($str, ENT_QUOTES);

    return htmlspecialchars($str);
}

echo normalize_str($lst['address']);

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

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