django-rest-framework:如何序列化已经包含JSON的字段?

Jas*_*ion 5 python django serialization json django-rest-framework

我是django-rest-framework的新手,所以可以使用一些帮助.

我有一个TextField的对象,它是一个包含JSON的字符串.

我正在使用django-rest-framework将整个对象序列化为JSON.但是,这个已经是JSON的字符串被序列化为包含JSON而不是JSON本身的编码字符串.

如何告诉序列化器按原样发送此字段而不是尝试将此字符串转换为JSON?我可以使用某种"忽略"装饰器或覆盖吗?或者我可以在序列化之前预先解析这个JSON吗?

这是有以下区别:

{"data": data}
Run Code Online (Sandbox Code Playgroud)

{"data": "data"}
Run Code Online (Sandbox Code Playgroud)

后者在客户端使用起来更麻烦......

Den*_*ehl 8

我解决了另一种方式:

1:对JSON内容使用JSON-Field(django-jsonfield或者django-json-field应该没问题).然后根据需要加载/转储

2:在我的序列化程序中,使用transform-method来防止数据作为字符串添加到响应中

class MyModelSerializer(serializers.ModelSerializer):
    def transform_myjsonfield(self, obj, value):
        return obj.myjsonfield

    class Meta:
        model = MyModel
Run Code Online (Sandbox Code Playgroud)

如果您需要写访问权限,则只需添加一个validate_myjsonfield可以转换回来的方法.

(当然,这也可以通过自定义DRF序列化器字段完成.


alm*_*lki 3

您可以简单地将 json 解码为 python 对象:

json_obj = json.loads(model.json_text)
Run Code Online (Sandbox Code Playgroud)

序列化对象后,将此字段替换为解码后的对象:

data = serializer.data
data["field"] = json_obj
return Response(data)
Run Code Online (Sandbox Code Playgroud)