15

私は Sencha Touch アプリを持っています。私が持っているストアの 1 つは、ajax プロキシと json リーダーを使用しています。私のシナトラ アプリから返された JSON の文字列の一部に、次の文字が含まれていることがあります: http://www.fileformat.info/info/unicode/char/2028/index.htm

見えませんが、この文字は 2 番目の文字列のピリオドと最後の引用符の間に 2 回出現します。

"description": "Each of the levels requires logic, skill, and brute force to crush the enemy.

"

「敵を倒すには、各レベルでロジック、スキル、力ずくの力が必要です。」を JavaScript コンソールにコピー アンド ペーストしてみてください。文字列として解析されず、 で失敗しSyntaxError: Unexpected token ILLEGALます。

これにより、JSON 応答が失敗します。私はこれに長い間立ち往生してきました!助言がありますか?

4

3 に答える 3

6

これを修正する唯一の信頼できる方法は、サーバー側です。JSON ジェネレーターがこれらの文字をエスケープして出力していることを確認してください\u2028

私の経験では、常に機能するプレーン ASCII で JSON を単純にエンコードするのが最も簡単です。欠点は、ASCII 以外の文字がより多くのスペースを占めるため、効率が悪いことです。そのため、それらの頻度によっては、そのトレードオフを望まない場合があります...

Perl の JSON::XS のドキュメントには、問題の適切な説明と Perl での修正方法に関するアドバイスがあります: http://search.cpan.org/perldoc?JSON::XS#JSON_and_ECMAscript

于 2012-05-03T01:15:14.767 に答える
0

概念的には、適切にエスケープすることによって有効な JavaScript リテラルである文字列のみをサーバーから送信することが許可されています。

クライアントでこの問題を修正したい場合は、追加の回避策が必要です (Firefox でのみ機能するようです):

var a = escape("Each of the levels requires logic, skill, and brute force to crush the enemy.");
alert(unescape(a));

ただし、サーバー上でエスケープする必要があるため、この議論は時代遅れです。

于 2012-04-16T11:35:38.220 に答える
-3

evalJSON の解析には使用しないでください。

JSON.parseまたはhttps://github.com/douglascrockford/JSON-jsを使用します。

JSON.parse('{}');  // where {} is your JSON String
于 2012-05-03T02:30:16.413 に答える