好的,所以我一直在处理一个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,因为我认为这是一个适当的错误。你怎么看?

最佳答案

这不是错误,它与JavaScript中处理字符串文字的方式有关。当你有:

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

...您的字符串将被解析为:
{ "hello": "hi
little boy?" }

...在传递给parseJSON()之前。这显然不是有效的JSON,因为\n已在“嗨小男孩”中间转换为原义的换行符。串。

您希望'\n'序列在转换为文字换行符之前使其成为parseJSON()函数。为此,需要在文字字符串中对其进行两次转义。喜欢:
'{ "hello": "hi\\nlittle boy?" }'

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

09-19 10:53