好的,所以我一直在处理一个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/