0

HTML ファイルに含める方向の JSON を生成しているため、JSON は Javascript 文字列にラップされます。

例えば

var dataContacts = 
        '{"Contacts":[{"Id":0,"Active":false,"Company":"Rory The Architect\\, Melt"}]}';

var contacts = $.parseJSON(dataContacts).Contacts;

このコードは JavaScript で失敗するはずです。

var dataContacts = 
        '{"Contacts":[{"Id":0,"Active":false,"Company":"Rory The Architect\\\\, Melt"}]}';

var contacts = $.parseJSON(dataContacts).Contacts;

私は .NET Serializer と NewtonSoft.Json の両方を使用しましたが、どちらも \ を \\\\ に変換することをサポートしていません。もちろん、\ を \\ に変換します。これは JSON の AJAX 配信には適していますが、JSON には適していません。 Javascript 文字列に埋め込まれています

ある種の myJson.Replace("\", "\\"); を実行する必要があるかもしれないと思います。

出力に \\ が必要な理由を調べました。次のリンクを参照してください。

jQuery JSON パーサーでバックスラッシュを二重にエスケープする必要があるのはなぜですか?

最初のエスケープは、Javascript 文字列リテラルでエスケープします。2 番目のエスケープは、JSON 文字列リテラルでエスケープします。

Javascript 式 '{"a":"b:\c"}' は、文字列 '{"a":"b:\c"}' に評価されます。この文字列には、エスケープされていない \ が 1 つ含まれており、JSON ではエスケープする必要があります。\ を含む文字列を取得するには、各 \ を Javascript 式でエスケープする必要があり、"\\" になります。

この問題の最善の道と、なぜ NewtonSoft も .NET シリアライザーも JSON をエンコードして Javascript ファイルに直接含めることをサポートしていないのか疑問に思っています。

4

2 に答える 2

1

難しいことをして、自分自身に不当な迷惑をかけているように私には見えます。すぐに解析できるようにするためだけに、JSON を JavaScript 文字列に入れるのはなぜですか? JSON はすでに JavaScript であるのに、そのまま使用しないのはなぜでしょうか?

var dataContacts = 
       {"Contacts":[{"Id":0,"Active":false,"Company":"Rory The Architect\\, Melt"}]};

var contacts = dataContacts.Contacts;

また、Paul Draper が指摘しているように、使用しようとしているアプローチでは、アポストロフィやその他の文字が関与し始めると、あらゆる種類の余分な複雑さが生じます。

于 2013-11-11T08:04:20.870 に答える