Python3.6 + Flask + Flask_restful を使用して、簡単なWeb API を作成しています。
仕様としては、get でパラメータを送信すると、JSON 形式の情報が戻る、というものです。
動作はするのですが、結果のJSONの中に不要なバックスラッシュが入ってしまい、これを消す方法がないかと質問させていただきます。
python
1import json 2 3class SampleDto(object): 4 5 data1 = None 6 data2 = 0 7 errorMessage = None; 8 9 def __init__(self): 10 pass
と、dto を定義しておき、
python
1 def get(self, aLoginKey): 2 : 3 (処理) 4 : 5 result = SampleDto() 6 result.data1 = "テスト" 7 result.data2 = 999 8
get で、上記のようにdto に値をセットします。このdto の内容を、JSONで返すのがおおまかな処理です。
最初は、
python
1 return jsonify(result)
とやったのですが、SampleDto がJSON に変換できないとエラーになりました。
次に、
python
1class SampleDtoJSONEncoder(json.JSONEncoder): 2 def default(self, obj): 3 if isinstance(obj, SampleDto): 4 return {'data1': obj.data1, 'data2': obj.data2, 'errorMessage': obj.errorMessage} 5 return json.JSONEncoder.default(self, obj)
とEncoder を追加し、
python
1 return jsonify(result, cls=SampleDtoJSONEncoder, ensure_ascii=False)
とやってみましたが、やはりエラー。
python
1 jsonText = json.dumps(result, cls=SampleDtoJSONEncoder, ensure_ascii=False) 2 return jsonText
とすると、エラーは出なくなりましたが、
JSON
1"{\"data1\": \"\u30c6\u30b9\u30c8\", \"data2\": 999, \"errorMessage\": null}"
と、バックスラッシュが入る上に、文字化けしてしまいます。
python
1 return jsonify(jsonText)
とすると、
JSON
1"{\"data1\": \"テスト\", \"data2\": 999, \"errorMessage\": null}"
と文字化けは直るのですが、バックスラッシュは消えません。
ちなみに、クラスではなく、普通にdict に入れて変換すると、
python
1 result = {'data1':'テスト', 'data2': 999, 'errorMessage': None} 2 return jsonify(result)
JSON
1{"data1":"テスト","data2":999,"errorMessage":null}
と、意図した結果が得られます。
自作クラスをJSON に変換し、なおかつ文字化けや、不要なバックスラッシュが入らないようにするには、どうしたらいいんでしょうか。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/21 17:07