为什么jQuery.parseJSON不接受换行?

时间:2012-10-07 02:05:05

标签: php javascript jquery json

好的,所以我一直在处理PHP 5.3服务器返回一个手工制作的JSON(因为在5.3中JSON_UNESCAPE_UNICODE函数中没有json_encode)并在阅读this thread之后做一些测试,我想我在jQuery的parseJSON函数中发现了一个问题。

假设我有以下JSON:

{
    "hello": "hi\nlittle boy?"
}

如果使用jsonlint.com进行检查,则可以看到它是有效的JSON。但是,如果您尝试以下操作,则会收到错误消息:

$(function(){
    try{
        $.parseJSON('{ "hello": "hi\nlittle boy?" }');
    } catch (exception) {
        alert(exception.message);
    }    
});​

Link to the fiddle

我在jQuery上打开了bug report,因为我认为这是一个正确的错误。你觉得怎么样?

1 个答案:

答案 0 :(得分:12)

这不是一个错误,它与如何在JavaScript中处理字符串文字有关。当你有:

'{ "hello": "hi\nlittle boy?" }'

...你的字符串将被解析为:

{ "hello": "hi
little boy?" }
在之前

... 将其传递给parseJSON()。这显然不是有效的JSON,因为\n已经转换为“喜欢小男孩”中间的文字换行符?串。

在转换为文字换行符之前,您希望“\n”序列转到parseJSON()函数。为此,需要在文字字符串中将两次转义。像:

'{ "hello": "hi\\nlittle boy?" }'

示例:http://jsfiddle.net/m8t89/2/