2014-03-03 62 views
3

我對django-rest-framework很新,所以可以使用一些幫助。django-rest-framework:如何序列化已包含JSON的字段?

我有一個TextField對象,它是一個包含JSON的字符串。

我使用django-rest-framework將整個對象序列化爲JSON。但是,這個已經是JSON的字符串被序列化爲包含JSON而不是JSON本身的編碼字符串。

如何告訴序列化程序發送此字段而不是試圖將此字符串轉換爲JSON?是否有某種「忽略」裝飾器或覆蓋我可以使用?或者我可以在序列化之前預先解析這個JSON?

這是具有之間的區別:

{"data": data} 

{"data": "data"} 

後者是更討厭在客戶端使用的...

回答

3

你可以簡單地解碼json轉換成python對象:

json_obj = json.loads(model.json_text) 

一旦序列化你的對象,與解碼對象替換這個領域:

data = serializer.data 
data["field"] = json_obj 
return Response(data) 
+0

非常好,謝謝你。我希望有一個簡單的解決方案,因爲我不能一直嘗試這種第一人。:) –

8

我解決了這個另一種方式:

1:使用JSON場的JSON內容(django-jsonfielddjango-json-field應精細)。只有在我的序列化,使用變換方法,以防止添加字符串的數據響應

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

    class Meta: 
     model = MyModel 

如果你需要寫訪問,您:這些然後將向負載/轉儲需要

2必須添加一個方法validate_myjsonfield它轉換回來。

(當然,這可能也與自定義DRF串行現場完成。

+0

我無法爲我工作,但您可以使用[Serializer#to_representation(self,instance)](http://www.django-rest-framework.org/api-guide/串行器/#重寫序列化,和反序列化行爲)。 – ldavid

相關問題