0

JSON と Django には興味深い問題があります。私はそれをこの問題に絞り込んだと思います。問題は、次のような JSON オブジェクトがあることです。

{"embed": "<iframe width='640' height='360' src='http://www.youtube.com/embed/Sw5Gk1L4LQE?wmode=opaque' frameborder='0' allowfullscreen></iframe>"}

PDB で、これを simplejson.dumps として出力すると、次のようになります (二重引用符に注意してください)。

{"embed": "<iframe width=\\"640\\" height=\\"360\\" src=\\"http://www.youtube.com/embed/Sw5Gk1L4LQE?wmode=opaque\\" frameborder=\\"0\\" allowfullscreen></iframe>"}

実際の HttpResponse オブジェクトは、このように二重エスケープのすべてのセットから 1 つのスラッシュを削除しています。

return HttpResponse(simplejson.dumps(result), 'application/json'

{"embed": "<iframe width=\"640\" height=\"360\" src=\"http://www.youtube.com/embed/Sw5Gk1L4LQE?wmode=opaque\" frameborder=\"0\" allowfullscreen></iframe>"}

クライアントでは、jQuery の parseJSON を使用していますが、単一のエスケープ文字 (3 番目の文字) がエスケープされていると見なされないため、問題が発生しています。しかし、これは実際には有効な JSON ですが、コンソールで parseJSON を直接実行しようとすると 2 番目のものが機能しますが、実際には有効な JSON ではありません (JSONLint.com によると)。

このJSONオブジェクトをDjangoからクライアントに取得し、埋め込みコードをそのままにするためにできることはありますか? 私はそれが私の側の小さなオーバーサイトであることを願っています.

4

1 に答える 1

0

わかりましたので、1時間後、私は最終的に、これに関していくつかの小さな間違いを犯し、ほとんどすべてが壊れたことに気付きました. Django を介してページを提供するのではなく、ローカルでページをロードしていました (自分が行っていた jQuery Mobile をテストできるようにするためです)。

そのローカル ファイルで、Django の JSON ビューからの出力をコピー アンド ペーストしました。

そのビューに JSONP 呼び出しを使用しようとしましたが、jQuery JSONCallback が原因でエラーがスローされました。

最終的に、これをテストする正しい方法は、JSONP を使用する必要がないように、Django を介して HTML を提供することでした。その場合、parseJSON は、単一エスケープされた二重引用符 \" を持つ JSON を受け入れましたが、おそらくそうではありませんそれは応答オブジェクトではないため、コピーして貼り付けることから受け入れます。

うまくいけば、私の過ちが将来誰かを助けるでしょう.

于 2012-05-25T20:08:00.093 に答える