当前位置: 首页 > 面试题库 >

使用simplejson对JSON模型进行JSON序列化

萧献
2023-03-14
问题内容

我想使用simplejson序列化Django模型。Django的序列化器不支持字典…,而simplejson不支持Django
Querysets。这是一个难题。

在该模型中,有一个具有“外键”赞助商级别的赞助商,我试图将属于某个赞助商级别的所有赞助商分组在一起。这是生成列表的代码:

from django.shortcuts import get_list_or_404
from special_event.models import Sponsor, SponsorLevel

sponsor_dict = {}

roadie_sponsors = get_list_or_404(Sponsor, level__category = SponsorLevel.ROADIE_CHOICE)

for item in roadie_sponsors:
    try:
        sponsor_dict[item.level.name].append(item)
    except KeyError:
        sponsor_dict[item.level.name] = [item]

这是sponsor_dict“制造”后的样子

{
    'Fan': [<Sponsor: Fan Sponsor>], 
    'VIP': [<Sponsor: VIP Sponsor>],
    'Groupie': [<Sponsor: Groupie Sponsor>],
    'Silver': [<Sponsor: Silver Sponsor>],
    'Bronze': [<Sponsor: Another Bronze Sponsor>, <Sponsor: Bronze Sponsor>]
}

我只在每个级别添加了一个赞助商,除了铜牌,只是为了展示其工作原理。我要做的就是将它“全部”放入JSON,以便jQuery可以轻松解释它。Django的其他序列化程序(例如XML或YAML)可以完成此操作吗?我可以“扩展”
Django JSON序列化程序来处理字典,还是可以“扩展” simplejson来处理Django QuerySet对象


问题答案:

我会继续扩展 simplejson 。基本上,您想在JSON编码器遇到QuerySet时插入django的序列化。您可以使用类似:

from json import dumps, loads, JSONEncoder

from django.core.serializers import serialize
from django.db.models.query import QuerySet
from django.utils.functional import curry

class DjangoJSONEncoder(JSONEncoder):
    def default(self, obj):
        if isinstance(obj, QuerySet):
            # `default` must return a python serializable
            # structure, the easiest way is to load the JSON
            # string produced by `serialize` and return it
            return loads(serialize('json', obj))
        return JSONEncoder.default(self,obj)

# partial function, we can now use dumps(my_dict) instead
# of dumps(my_dict, cls=DjangoJSONEncoder)
dumps = curry(dumps, cls=DjangoJSONEncoder)

有关defaultmethod的更多信息,请查看simplejson文档。将其放在python模块中,然后导入dumps,您就可以开始了。但是请注意,此功能将仅帮助您序列化QuerySet实例,而不能Model直接序列化实例。



 类似资料:
  • 问题内容: 我有一个像这样的简单容器类的结构(在伪红宝石中): 有没有简单的方法可以在Ruby中将其反序列化为JSON?还是应该像本例一样为每个类制作嵌套的序列化方法? 编辑: 在我的特定情况下,我想将一些JSON数据发布到运行Ruby的服务器上,该服务器将提取数据并采取相应的措施。 JSON的发送者不一定是Ruby进程,而可能是其他系统的后端。(尽管在我的测试工具中是Ruby)。 因此,我不需要

  • 问题内容: 我有一个Python ,其中包含带有和方法的对象,以确保集合中没有重复项。 我需要对该结果进行json编码,但是即使将一个空值传递给该方法也会引发。 我知道我可以为具有自定义方法的类创建扩展,但是我什至不知道从哪里开始进行转换。我是否应该使用默认方法中的值创建字典,然后返回该方法的编码?理想情况下,我想使默认方法能够处理原始编码器阻塞的所有数据类型(我将Mongo用作数据源,所以日期似

  • 我想使用杰克逊2.13.3将数据结构序列化为JSON。我创建了一个简化的示例数据结构来显示所需的序列化是什么。 数据结构由一个主组成,其中包含一个的列表。元素之间有一些链接。 在示例中,我创建了元素的以下链接结构: 目标是序列化通过链接信息的ID表示链接数据。元素的完全序列化应该只发生在容器的顶级列表中。这与jackson在序列化过程中遇到元素的顺序不一致。 我想得到以下输出:

  • 问题内容: 我有一个使用序列化列的模型: 有没有办法使此序列化使用JSON而不是YAML? 问题答案: 在Rails 3.1中,您可以 希望能有所帮助

  • 问题内容: 我有以下JSON: 当日期每次更改时,我该如何解析呢?我必须使用Jackson进行解析。 问题答案: 当您具有 动态键时 ,可以使用。键的类型和值取决于您的需要。 最简单的方法是。您需要为此: 假设您的密钥是 有效日期 ,则可以使用。 需要以下依赖项: 然后您可以拥有: 最后,您可以将动态键的值映射到Java类。让我们称之为: 然后您可以拥有:

  • 我一直在使用骆驼泉DSL中的json、dataFormats和马歇尔/un马歇尔标签,如以下url和applicationContext.xml.的片段所述 http://camel.apache.org/json.html 我想将我的joda DateTime对象序列化为long,如下所述: http://wiki.fasterxml.com/JacksonFAQDateHandling 我知道