2016-10-19 33 views
0

私はDjangoでAPIを開発しています。私はバックエンドでPythonでデータをエンコーディングし、javaでフロントエンドでデコードする際に多くの問題に直面しています。PythonのエンコーディングでJSONデータを送信する正しい方法

クライアントアプリケーションに正しいJSONデータを効率的に送信するための標準ルールはありますか?

フロントエンドで正しく受信されていないいくつかのヒンディー語の文字がありますが、それはだから私は問題が

+1

"多くのissuseに直面している"。何が問題なの?問題の内容を知っていれば、問題を修正する方が簡単です。 –

+0

あなたの質問には、使用しているPythonのバージョンでタグを付ける必要があります。Unicodeの扱いは、Python 2とPython 3で異なります。また、コードに使用するPythonコードだけでなく、 JSON。この記事が参考になるかもしれません:[Pragmatic Unicode](http://nedbatchelder.com/text/unipain.html)、SOベテランのNed Batchelderによって書かれました。 –

答えて

3

json.loadsjson.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'> 
+0

@abhi_bond。これは役に立ちますか? –

+0

このような良い説明のためにnihalに感謝しますが、問題は文字列のエンコーディング問題です。ヒンディー文字を正しくエンコードできません。申し訳ありませんが、以前は言及していませんでした。 –

+0

ヒンディー語文字はユニコード文字なので、この質問に対する答えはhttp://stackoverflow.com/questions/18337407/saving-utf-8-texts-in-json-dumps-as-utf8-not-as-u-escapeシーケンスが役に立ちます。 –

関連する問題