私はDjangoでAPIを開発しています。私はバックエンドでPythonでデータをエンコーディングし、javaでフロントエンドでデコードする際に多くの問題に直面しています。PythonのエンコーディングでJSONデータを送信する正しい方法
クライアントアプリケーションに正しいJSONデータを効率的に送信するための標準ルールはありますか?
フロントエンドで正しく受信されていないいくつかのヒンディー語の文字がありますが、それはだから私は問題が
私はDjangoでAPIを開発しています。私はバックエンドでPythonでデータをエンコーディングし、javaでフロントエンドでデコードする際に多くの問題に直面しています。PythonのエンコーディングでJSONデータを送信する正しい方法
クライアントアプリケーションに正しいJSONデータを効率的に送信するための標準ルールはありますか?
フロントエンドで正しく受信されていないいくつかのヒンディー語の文字がありますが、それはだから私は問題が
json.loads
とjson.dumps
が一般的に使用されている私の側にあると思います「という文字でJSON終端されていないオブジェクト」というエラーを与えますPythonでJSONデータをエンコードし、デコードします。
dumps
はオブジェクトを取得して文字列を生成し、load
はファイルのようなオブジェクトを取得し、そのオブジェクトからデータを読み取り、その文字列を使用してオブジェクトを作成します。
エンコーダは、デフォルトでPythonのネイティブタイプ(文字列、Unicode、int、float、list、tuple、dict)を認識します。
import json
data = [ { 'a':'A', 'b':(2, 4), 'c':3.0 } ]
print 'DATA:', repr(data)
data_string = json.dumps(data)
print 'JSON:', data_string
値は、Pythonのrepr()出力と非常によく似た方法でエンコードされます。
$ python json_simple_types.py
DATA: [{'a': 'A', 'c': 3.0, 'b': (2, 4)}]
JSON: [{"a": "A", "c": 3.0, "b": [2, 4]}]
エンコードして、再デコードしても、まったく同じタイプのオブジェクトが得られないことがあります。特に
import json
data = [ { 'a':'A', 'b':(2, 4), 'c':3.0 } ]
data_string = json.dumps(data)
print 'ENCODED:', data_string
decoded = json.loads(data_string)
print 'DECODED:', decoded
print 'ORIGINAL:', type(data[0]['b'])
print 'DECODED :', type(decoded[0]['b'])
、文字列はUnicodeに変換され、タプル、リストになります。
$ python json_simple_types_decode.py
ENCODED: [{"a": "A", "c": 3.0, "b": [2, 4]}]
DECODED: [{u'a': u'A', u'c': 3.0, u'b': [2, 4]}]
ORIGINAL: <type 'tuple'>
DECODED : <type 'list'>
@abhi_bond。これは役に立ちますか? –
このような良い説明のためにnihalに感謝しますが、問題は文字列のエンコーディング問題です。ヒンディー文字を正しくエンコードできません。申し訳ありませんが、以前は言及していませんでした。 –
ヒンディー語文字はユニコード文字なので、この質問に対する答えはhttp://stackoverflow.com/questions/18337407/saving-utf-8-texts-in-json-dumps-as-utf8-not-as-u-escapeシーケンスが役に立ちます。 –
"多くのissuseに直面している"。何が問題なの?問題の内容を知っていれば、問題を修正する方が簡単です。 –
あなたの質問には、使用しているPythonのバージョンでタグを付ける必要があります。Unicodeの扱いは、Python 2とPython 3で異なります。また、コードに使用するPythonコードだけでなく、 JSON。この記事が参考になるかもしれません:[Pragmatic Unicode](http://nedbatchelder.com/text/unipain.html)、SOベテランのNed Batchelderによって書かれました。 –