4

好的,所以我一直在处理返回手工 JSON 的 PHP 5.3 服务器(因为在 5.3JSON_UNESCAPE_UNICODEjson_encode函数中没有),在阅读了这个线程并进行了一些测试之后,我想我在 jQuery 的parseJSON函数中发现了一个问题。

假设我有以下 JSON:

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

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

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

链接到小提琴

我在 jQuery 上打开了一个错误报告,因为我认为这是一个正确的错误。你怎么看?

4

1 回答 1

12

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

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

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

{ "hello": "hi
little boy?" }

...它被传递给parseJSON(). 这显然不是有效的 JSON,因为在\n“hi little boy?”中间已经转换为文字换行符。细绳。

您希望 ' ' 序列在转换为文字换行符之前\n使其成为函数。parseJSON()为此,需要在文字字符串中对其进行两次转义。像:

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

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

于 2012-10-07T02:11:28.670 回答