如何将模型实例作为 JSON 返回,以便由 GSON 安卓端反序列化?



我有一个 django rest 框架GenericAPIView

class ListUnseenFriendRequests(generics.GenericAPIView):
permission_classes = (IsAuthenticated,)
def get(self, request, format=None):
friendship_requests_list = Friend.objects.unread_requests(user=request.user)
friendship_requets_dict = [friend_request_as_json(obj) for obj in friendship_requests_list]
return Response(json.dumps(friendship_requets_dict), content_type="application/json")

ListUnseenFriendRequests应返回发出请求的用户的所有好友的列表。我不确定这是否是将 FriendshipRequest 对象作为json返回的最佳/最简单的方法,如果有更好的方法,请告诉我。

我还使用2个辅助方法,friend_request_as_jsonuser_as_json

def friend_request_as_json(obj):
return dict(
id=obj.id, 
from_user=user_as_json(obj.from_user), 
created=str(obj.created))
def user_as_json(obj):
return dict(
id=obj.id,
email=obj.email,
firstName=obj.firstName,
lastName=obj.lastName)

使用邮递员测试ListUnseenFriendRequests视图,这就是我得到的:

"[{"created": "2017-08-02 09:06:54.272168+00:00", "id": 29, 
"from_user": {"lastName": "Graham", "email": "joe@gmail.com", "firstName": "Joe", "id": 5}}]"

为什么会有所有这些反斜杠?它有什么不同吗?

在客户端,我使用改造和 GSON 为我反序列化。客户端上将保存此响应数据的模型FriendRequestResponse

public class FriendRequestResponse {
@SerializedName("id")
@Expose
private int id;
@SerializedName("from_user")
@Expose
private User fromUser;
@SerializedName("created")
@Expose
private String createdAt;
public FriendRequestResponse(int id, User fromUser, String createdAt) {
this.id = id;
this.fromUser = fromUser;
this.createdAt = createdAt;
}
public int getId() {
return id;
}
public User getFromUser() {
return fromUser;
}
public String getCreatedAt() {
return createdAt;
}
}

User模型:

public class User {
@SerializedName("id")
@Expose
private int id;
@SerializedName("email")
@Expose
private String email;
@SerializedName("firstName")
@Expose
private String firstName;
@SerializedName("lastName")
@Expose
private String lastName;
@SerializedName("date_joined")
@Expose
private String dateJoined;
private String password;
public User(String email, String firstName, String lastName, String password) {
this.email = email;
this.firstName = firstName;
this.lastName = lastName;
this.password = password;
}
public int getId() { return id; }
public String getEmail() {
return email;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public String getPassword() {
return password;
}
public String getDateJoined() {
return dateJoined;
}
}

此模型的结构是否正确,可以采用 json 并适合它?

您已经有了 JSON,您正在尝试将其转储为 JSON。

请尝试改用以下内容:

return Response(json.loads(friendship_requets_dict), content_type="application/json")

最新更新