0

json に関連する非常に奇妙な jQuery の動作に直面しています。以下は、JSON 応答を送信するサーブレットに POST 要求を送信するコードです。ほとんどのリクエストの値を取得できますが、一部のリクエストでは、JSON から値を取得しているときに次のエラーが発生します。

parsererror, SyntaxError: JSON.parse: bad control character in string literal

しかし、このサイトで JSON 応答 (Eclipse コンソールから取得しています) を確認すると、ここにリンクの説明を入力してください。

このサイトは、エラーを発生させずに JSON を解析します!! サイトに移動 -> [テキスト] タブのテキスト領域に任意の JSON をコピーし、[ビューア] タブをクリックします。それは正しく解析されます。

以下は、jQuery がエラーを報告する 2 ~ 3 個の JSON です -

{"topics": [{ "categoryName":"Law Crime" , "score":"90%"}],"socialTags": [{ "originalValue":"Social inequality" , "importance":"1"},{ "originalValue":"Affirmative action" , "importance":"1"},{ "originalValue":"Discrimination" , "importance":"1"},{ "originalValue":"Education policy" , "importance":"2"},{ "originalValue":"Politics" , "importance":"2"},{ "originalValue":"Ethics" , "importance":"2"},{ "originalValue":"Social philosophy" , "importance":"2"},{ "originalValue":"Same-sex marriage in Canada" , "importance":"2"},{ "originalValue":"Affirmative action in the United States" , "importance":"2"},{ "originalValue":"Same-sex marriage in the United States" , "importance":"2"},{ "originalValue":"Law Crime" , "importance":"1"}],"entities": [{ "_type":"Facility" , "name":"Supreme
Court"},{ "_type":"Organization" , "name":"Supreme
Court"}]}

私は何度も試しましたが、これらの JSON に対して毎回同じエラーが発生します。

サーブレットのバックエンドでこれらの JSON を作成しています。

以下は、jQuery で JSON から値を取得するコードです。

$.ajax({
        type: 'POST',
        //servlet url
        url: 'calaiscaller',
        // parameters 
        data: {content: summary},
        // expected data-type of response
        dataType: 'json',
        // to execute when got the json result
        success: function(jsonResponse){            
            // clear the old topic data 
            $('#topics').empty();
            $('#topics').append("<p class='text-left label label-info'>Topics:</p>");   
            // add new topic data
            $.each(jsonResponse.topics, function(){
                var topicData="<p><span class='text-left'>" + this.categoryName + "</span><span class='pull-right'>" + this.score + "</span></p>";
                $('#topics').append(topicData);
            });

            // clear new social-tag data
            $('#social-tags').empty();
            $('#social-tags').append("<p class='text-left label label-info'>Social Tags:</p>");
            // add new social-tag data
            $.each(jsonResponse.socialTags, function(){
                var socialTagData="<p><span class='text-left'>" + this.originalValue + "</span><span class='pull-right'>" + this.importance + "</span></p>";
                $('#social-tags').append(socialTagData);
            });

            // clear new entities data
            $('#entities').empty();
            $('#entities').append("<p class='text-left label label-info'>Entities:</p>");
            // add new entities data
            $.each(jsonResponse.entities, function(){
                var entitiesData="<p><span class='text-left'>" + this._type + "</span><span class='pull-right'>" + this.name + "</span></p>";
                $('#entities').append(entitiesData);
            });

            //alert('success');
            // write the success status
            $('#statusField'+uniqueId).addClass('alert alert-success pull-left');
            $('#statusField'+uniqueId).append('Success!');
        },

        // to execute when error
        error: function(jqXHR, textStatus, errorThrown){
            //alert("error");
            //alert(textStatus);
            //alert(errorThrown);
            // print the error
            // write the error message
            $('#statusField'+uniqueId).addClass('alert alert-error pull-left');
            $('#statusField'+uniqueId).append('Error: '+textStatus+', '+errorThrown);
        },

        // always executed at last whether success or error
        complete: function(){
            // bring back submit button to its original state
            $('.showinfo').button('reset');
            // hide the progress bar
            $('#progress').hide();
            // fade in the results
            $('#resultbox').fadeIn('slow', function(){

            });
        }
    });

ヘルプ!

4

1 に答える 1

2

値にキャリッジ リターンが含まれているため、元の JSON は無効でした。最初の JSON 文字列:

"name": "U.S.
Supreme Court"

2 番目の文字列:

"name": "Supreme
Court"

\n- のようにキャリッジ リターンを使用したい場合"Supreme\nCourt"は、実際には必要ないと思いますが、スペースが必要なだけです。

エラーが発生している特定の JSON 文字列がある場合は、 http://jsonlint.com/で検証できます。

于 2013-06-25T12:28:49.200 に答える