4

私の MVC コントローラーには、ビューに渡したいコレクションが含まれているので、次のようにします。

// myCollection is a list of objects
var j = new JavaScriptSerializer();
ViewBag.Data = j.Serialize(myCollection);

そしてJS内のビューで

var data = $.parseJSON('@Html.Raw(ViewBag.Data)');

.. 展開すると次のようになります。

var data = $.parseJSON('[{"Value":2,"Fullname":"Value"}]');

これは問題なく動作しますが、Json 文字列に二重引用符が含まれていると、バックスラッシュでエスケープされ、次のように parseJson が失敗します。

$.parseJSON('[{"Value":2,"Fullname":"Value \" with double quote"}]');

どうすれば修正できますか?

4

2 に答える 2

1

以下は有効なJSONですが、文字列がJavaScriptの場合、最初にエスケープ解除されるため、そのようにはなりません。

 '[{"Value":2,"Fullname":"Value \" with double quote"}]'

JavaScriptは最初にこれをアンエスケープして次のようになります。

 '[{"Value":2,"Fullname":"Value " with double quote"}]'

JSONが登場すると、引用符が文字列を終了しようとしているため、明らかに予期しない文字が表示されます。あなたがする必要がある\\"のは、JS側でそれをしたいか、.NET側でそれをしたいかどうかにかかわらず、どういうわけかこれらを二重引用符で囲む(動作する)ことです。

ただし、JSONを使用してこれを解析する必要はまったくなく、次のようにオブジェクトリテラルとして使用できます。

var data = @Html.Raw(ViewBag.Data);

これは次のように変換されます:

var data = [{"Value":2,"Fullname":"Value \" with double quote"}];

..これは完全に有効です。

于 2013-02-14T12:16:53.027 に答える
-2

カスタム関数を作成し、その中でparseJSONを呼び出してみませんか。しかし、その前に\ "を置き換えますか?

function parseJson(str){
    var temp = str.replace('\"', '"');
    return $.parseJSON(temp);
}
于 2013-02-14T12:07:00.017 に答える