4

わかりましたので、手作りの JSON を返す PHP 5.3 サーバーを扱ってきました (5.3 にJSON_UNESCAPE_UNICODEは関数がないため)。このスレッドjson_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' シーケンスを関数にする必要があります。そのためには、リテラル文字列で2 回parseJSON()エスケープする必要があります。お気に入り:

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

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

于 2012-10-07T02:11:28.670 に答える