2017-11-01 20 views
0

辞書オブジェクトをReactJSファイルで送信する必要があるため、JSONとして変換したいと考えています。私のコードは以下の通りです:このビューで辞書オブジェクトをJSONオブジェクトに変換できません

def get(self, request, pk, format = None): 
    queryset = SocialAccount.objects.filter(provider='twitter').get(id=pk) 
    user_id= queryset.uid 
    name = queryset.extra_data['name'] 
    username = queryset.extra_data['screen_name'] 
    data = {'user_id':user_id,'name':name,'username':username} 
    data = json.dumps(data) 
    print(type(json.loads(data))) 
    return Response(json.loads(data)) 

、私の代わりにJSONオブジェクトの「印刷(タイプ(json.loads(データ)))」の行に「クラスの辞書 '」を得ました。私が間違っているなら、私を案内してください。私は何をする必要がありますか?おかげさまで

+1

[JSON配列へのPython辞書の変換](https://stackoverflow.com/questions/14661051/convert-python-dictionary-to-json-array) – Cromulent

+0

@ pm95の可能な複製:ここでは間違いをほとんどカバーしていませんOPが再びデコードされたことを示します。 –

+0

あなたはダンプして読み込んだので、dict –

答えて

4

あなたはレスポンスの代わりにJsonResponseを使用することができます。

def get(self, request, pk, format=None): 
    # ... 
    data = {'user_id': user_id,'name': name,'username': username} 
    return JsonResponse(data) 

あなたの問題は、あなたがjson.loads(data)を使用してPythonオブジェクトに戻ってデータを変換することです。代わりにResponse(data)を返す必要がありますが、JsonResponseを好むべきです。

+1

良い答え!なぜDjangoのようなフレームワークを使うと複雑になるのですか?愚か者ではなく、工具を使用してください! – cezar

+0

ありがとうございました。 –

+0

@cezarはい、私はReactJSファイルで "user_id"を使いたいです。だから私はそうするのが混乱していた。 –

5

お客様が正常に作成されたJSONです。あなたが間違っていたのは、というJSONをもう一度デコードして、Pythonオブジェクトに戻ったということです。そのデコードの結果だけをテストしました。それはまさに新しい辞書オブジェクトです。 dataで作成して保存したJSONが有効なJSONであり、これを再デコードできたことが証明されています。

つまり、は、もう一度デコードしません。です。代わりにJsonResponse objectを返すと

data = {'user_id':user_id,'name':name,'username':username} 
data = json.dumps(data) 
return Response(data) 

あなたはこれを簡素化することができます:あなたはすでにJSONを持って、ちょうどそれを返す

# at the top 
from django.http import JsonResponse 

# in your view 
data = {'user_id':user_id,'name':name,'username':username} 
return JsonResponse(data) 

また、これはあなたのための右のコンテンツタイプを設定するの面倒を見ます。

+0

ありがとう、助けてください。しかし、これでは、私がタイプ(json.dumps(data))を印刷した場合、 "class 'str'が返されます。 –

+1

@Great_DR:はい、JSON文書は 'str'オブジェクトに格納されています。そのとおりです**。値自体を印刷してみてください。 –

+0

はい、私はあなたの答えを感謝していますが、私は余分な '/'すべての文字列で得た。私は郵便配達所でチェックした。実際のJSONオブジェクトではありませんでした。 –

関連する問題