【问题标题】:Django Model Customize Serialization to JSONDjango 模型自定义序列化为 JSON
【发布时间】:2014-10-05 01:16:12
【问题描述】:

默认序列化器实现:

class Serializer(base.Serializer):
    """
    Serializes a QuerySet to basic Python objects.
    """

    internal_use_only = True

    def start_serialization(self):
        self._current = None
        self.objects = []

    def end_serialization(self):
        pass

    def start_object(self, obj):
        self._current = {}

    def end_object(self, obj):
        self.objects.append({
            "model"  : smart_unicode(obj._meta),
            "pk"     : smart_unicode(obj._get_pk_val(), strings_only=True),
            "fields" : self._current
        })
        self._current = None

数据输出格式:

[{“pk”:2,“model”:“android.job”,“fields”:{“status”:“lol”,“customer”:“HAHA”}},{“pk”:3 ,“模型”:“android.job”,“字段”:{“状态”:“lul”,“客户”:“BWAHA”}}]

我的覆盖:

class MySerialiser(Serializer):
    def start_serialization(self):
        self._current = None
        self.objects = []

    def end_serialization(self):
        pass

    def start_object(self, obj):
        self._current = {}

    def end_object(self, obj):
        self._current['id'] = obj._get_pk_val()
        self.objects.append(self._current)

输出格式:

{"status": "lol", "customer": "HAHA", id:2L}{"status": "lul", "customer": "BWAHA", id:3L}

我需要什么:

[{"status": "lol", "customer": "HAHA", id:2L}, {"status": "lul", "customer": "BWAHA", id:3L}]

注意 - 这是在 Django 中 - 所有这些都是字符串类型!不要假设它们是列表/字典

【问题讨论】:

标签: python json django serialization


【解决方案1】:

终于成功了!

class MySerialiser(Serializer):
    def start_serialization(self):
        self._current = None
        self.objects = []

    def end_serialization(self):
        simplejson.dump(self.objects, self.stream, cls=DjangoJSONEncoder, **self.options)

    def getvalue(self):
        if callable(getattr(self.stream, 'getvalue', None)):
            return self.stream.getvalue()

    def start_object(self, obj):
        self._current = {}

    def end_object(self, obj):
        self._current['id'] = obj._get_pk_val()
        self.objects.append(self._current)
        self._current = None

【讨论】:

    猜你喜欢
    • 2016-08-08
    • 1970-01-01
    • 1970-01-01
    • 2014-05-19
    • 2014-06-27
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多