質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

3151閲覧

Django rest frameworkでのResponseでjsonのデータを返したい

Ykkykk

総合スコア140

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/02/07 02:14

Django rest frameworkを使用してAPIを作成してみております。

views.pyのviewsetクラスで、json形式のファイルの中身を返したいと考えています。

python3

1class ExViewSet(viewsets.ModelViewSet): 2 def list(self, request, *args, **kwargs): 3 data = Ex.objects.all()[0] 4 f = open(data, 'r') 5 json_data = json.load(f) 6 return Response(json_data)

以上のようにjsonファイルを読み込み、中身をResponseで返すことができているのですが、curlで呼び出すと、一行で表示されてしまいます。
そこで以下のように修正してみました。

Python3

1class ExViewSet(viewsets.ModelViewSet): 2 def list(self, request, *args, **kwargs): 3 file = Ex.objects.all()[0] 4 f = open(data, 'r') 5 json_data = json.load(f) 6 data = json.dumps(json_data, indent=4) 7 return Response(data)

以上のように変えた後、再度curlで呼び出してみると、改行マーク(\n)と四つ分のスペースを入れて一行のままで表示されてしまいました。
print(data)ではきれいに整形されて表示されるのですが、Responseでは整形されたものが改行記号などをともなって一行で表示されてしまいます。

flask で自作クラスをJSON変換すると、バックスラッシュが入ってしまうという質問で、json.dumpsに渡す際にjson形式のstrになってしまっているのではないか、という回答がありましたのでtype()でjson_dataの型を確認したところ、dictとなっていました。

Responseでは整形された形でjsonファイルの中身を返すことはできないのでしょうか?
ご教示いただけますと幸いです。よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

httpieを使用したところ整形された状態で出力されました。
django rest frameworkというより、curlの仕様ということでしょうか。

投稿2019/02/07 03:13

Ykkykk

総合スコア140

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問