簡體   English   中英

如何將Django模型實例列表作為JSON返回?

[英]How to return list of django model instances as JSON?

我有一個觀點:

class ListUnseenFriendRequests(generics.GenericAPIView):
    permission_classes = (IsAuthenticated,)

    def get(self, request, format=None):
        friendship_requests_list = Friend.objects.unread_requests(user=request.user)
        friendship_requests_rough_json = [serializers.serialize('json', [obj]) for obj in friendship_requests_list]
        friendship_requests_json = [obj.strip("[]") for obj in friendship_requests_rough_json]
        return Response(friendship_requests_json, content_type="application/json")

這為我提供了以下JSON:

[
    "{\"model\": \"friendship.friendshiprequest\", \"pk\": 8, \"fields\": {\"from_user\": 6, \"to_user\": 4, \"message\": \"\", \"created\": \"2017-07-27T14:02:28.492Z\", \"rejected\": null, \"viewed\": null}}",
    "{\"model\": \"friendship.friendshiprequest\", \"pk\": 13, \"fields\": {\"from_user\": 2, \"to_user\": 4, \"message\": \"\", \"created\": \"2017-07-27T16:47:24.863Z\", \"rejected\": null, \"viewed\": null}}",
    "{\"model\": \"friendship.friendshiprequest\", \"pk\": 20, \"fields\": {\"from_user\": 14, \"to_user\": 4, \"message\": \"\", \"created\": \"2017-07-31T08:03:27.887Z\", \"rejected\": null, \"viewed\": null}}",
    "{\"model\": \"friendship.friendshiprequest\", \"pk\": 22, \"fields\": {\"from_user\": 22, \"to_user\": 4, \"message\": \"\", \"created\": \"2017-08-01T11:52:08.830Z\", \"rejected\": null, \"viewed\": null}}"
]

在android客戶端上,向此視圖發出請求時,會發生以下錯誤:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 3 path $[0]

我認為這意味着應該不存在任何"包裝JSON響應"的問題。如果這是問題,應如何將其刪除?如果這不是問題,應如何解決?

更好的方法是為Friend模型創建一個序列化器,並使用該序列化器類將其轉換為JSON。 但是,如果您不想使用它,這將為您提供嘗試的解決方案

from django.http import JsonResponse
import json
class ListUnseenFriendRequests(generics.GenericAPIView):
    permission_classes = (IsAuthenticated,)

    def get(self, request, format=None):
        friendship_requests_list = json.loads(serializers.serialize('json',Friend.objects.unread_requests(user=request.user))
        return JSONResponse(friendship_requests_list,safe=False)

serializers.serialize方法正在序列化Django對象,並將其轉換為代表性字符串。 我們知道該字符串應該是JSON表示形式,因此我們將該字符串轉換為JSONResponse發送的JSON。 推薦這個

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM