2011-11-04 19 views
7

内部の単一引用符私はこのようなデータをプリントアウトしている:JSONパース - Djangoテンプレートで名前

P.place = '{{place.json|safe}}'; 

は、その後のJavaScriptファイルに私はそのようにそれをペアリングしています:

place = JSON.parse(P.place); 

すべてが大丈夫ですそのようなデータのために:

{"category": "Cars", "name": "Z"} 

文字列は、そのようになりますので:

P.place = '{"category": "Cars", "name": "Z"}' 

だから、私はJSON.parseメソッドの魔女は、入力として文字列を受け入れる使用してそれを解析することができます。私はそのようなデータを取得するとき

問題は次のとおりです。

{"category": "Cars", "name": "Wojtek's Z"} 

JSONパーサーの入力文字列がそのように見えるよりもので:

'{"category": "Cars", "name": "Wojtek' 

その後、JSONので、私は、JSON文字列内の単一引用符をエスケープすることはできません文字列が無効になります。同じ理由から、私は周囲の引用符を二重で置き換えることはできず、JSON文字列の中で二重引用符をエスケープすることはできません。

私のソリューションは、次のようになります。

HTMLテンプレートで:

P.place = {{place.json|safe}}; 

は、その後のJavaScript

var place = JSON.stringify(P.place); 
place = JSON.parse(place); 

にそれは動作しますが、それが最適解の私見ではありません。もっと包丁方法でこの問題を解決する方法

+0

JSON内にアポストロフィを引用する必要がありますが、回避方法はありません。しかし、通常は "\ '"を使ってオブジェクトを定義すると、それをエスケープすることができます。または、好きな場合は、ユニコードをエスケープしてください(私は思っています)。 – StaxMan

+0

あなたは、それを行うとjson.org –

+0

あなたは何を行うことはできませんjsonlint.comチェックアウトすることはできませんか? jsonの仕様をチェックしてください。 – StaxMan

答えて

8

私は2つの可能性を考えることができます:

は例えば、そのデータを読み、それにあなたのテンプレートデータを注入し、タイプapplication/jsonのscript要素を作成します。

<script id="place-json" type="application/json"> 
    {{place.json|safe}} 
</script> 
<script type="application/javascript"> 
    P.place = $('#place-json').text(); 
</script> 

または、文字列を挿入する前に一重引用符を手動でエスケープします(例:

simplejson.dumps(yourdata).replace("'", r"\'") 
+0

答えをありがとう!しかし、私はこのソリューションが私のオーバーヘッドよりも大きいと思っています。ところで、私たちはスクリプト要素でidを使うことはできません。 –

+0

なぜscript要素内でidを使用できないのですか? –

+0

http://stackoverflow.com/questions/2741441/giving-the-script-tag-an-id script要素のidについての情報のため。 また、私はあなたがコースのベンチマークの必要があり、見ても、文字列化してからJSONを再解析するよりも少ないオーバーヘッドであるのいずれかを疑います。 –

関連する問題