2011-08-29 30 views
1

私はJSONオブジェクトを返すAJAXレスポンスを持っています。読むことになっている辞書の値のいずれか:Python AJAXレスポンス文字列リテラル

"画像\/JPEG"

しかし、その代わりで読み取ります

"画像\\/JPEG"

私が経てきました文字列リテラルに関するドキュメントとエスケープシーケンスを無視する方法については、私は文字列の先頭に 'r'をつけようとしましたが、これまでのところ運はありません。

マイJSONエンコードされた辞書は、次のようになります。

response.append({ '名称':i.pk、 'サイズ':偽、 'タイプ': '画像/ JPEG' })

大変お手伝いいたします。

+2

私は混乱しています。値は "image/jpeg"か "image \/jpeg"か? – codeape

+0

"image \/jpeg"にする必要があります。私はその方法を読むために必要なJavascriptライブラリを使用します。 – Oscar

+0

基本的に\\は\ as \のPythonバージョンで、文字列構文の一部です。私はあなたが 'image \\/jpeg'を書くときにはうまくいくと思う。たぶんあなたはurllib.quoteを試すことができますか?それはURLの文字を置き換えるのに便利ですが、まだ動作するかもしれません... – amito

答えて

1

JSON specによれば、\文字はJSONで\\にエスケープする必要があります。

だから、PythonのJSONライブラリが正しいです:JSONはブラウザで評価/解析されると

>>> import json 
>>> json.dumps({"type": r"image\/jpeg", "size": False}) 
'{"type": "image\\\\/jpeg", "size": false}' 

type属性が正しい値image\/jpegを持つことになります。

もちろんの

ザ・PythonのJSONパーサーは、同様エスケープを処理します。

>>> print(json.loads(json.dumps({"type": r"image\/jpeg", "size": False}))["type"]) 
image\/jpeg 

私はあなたのJavaScriptライブラリは、リソースのMIMEを識別するために使用されるようになります。値のためにその特定の値が必要であること、それは非常に奇妙見つけますタイプ。

関連する問題