zoukankan      html  css  js  c++  java
  • 序列化数据的两种方式

    #序列化
    def test(request):
        from django.core import serializers
        host_list = models.Host.objects.filter(id__lt=5)
        data=serializers.serialize("json",host_list)
        return HttpResponse(data)
    def test(request):
    
        # 序列化2,不支持datetime
        import json
        host_list=models.Host.objects.filter(id__lt=5).values('id','hostname','port')
        data=json.dumps(list(host_list))
        return HttpResponse(data)

    json不能序列化queryset类型,需要用values进行转换成列表

    json不支持datetime类ing,需要我们添加新功能

    import json
    from datetime import date
    from datetime import datetime
    
    #json.JSONEncoder默认不序列化datetime类型,我们给这个方法添加自定义功能
    class CustomEncoder(json.JSONEncoder):
        def default(self, field):
            if isinstance(field, datetime):
                return field.strftime('%Y-%m-%d %H:%M:%S')
            elif isinstance(field, date):
                return field.strftime('%Y-%m-%d')
            else:
                return json.JSONEncoder.default(self, field)
    
    #每个字典的元素会传入json的JSONEncoder中,如果是datetime类型进行格式化
    dic = {
        'k1':'v1',
        'k2':123,
        'ctime':datetime.now()
    }
    #cls=CustomEncoder会将拿到的元素放到自定义的类中处理,如果不是时间类型用默认的序列化方式
    ds = json.dumps(dic,cls=CustomEncoder)
    print(ds)

     以后取到任何类型我们都可以用JSONEncoder进行自定义改造。

  • 相关阅读:
    网线 ------ 交叉线
    ubuntu ------ 网络 ifconfig 不显示IP地址
    STM32L011D4 ----- 低功耗
    List 集合 使用 remove 踩得坑
    Map 集合遍历的4种方法
    elasticsearch 集群详解
    谷歌浏览器添加插件时显示程序包无效:"CRX_HEADER_INVALID" 解决办法
    MySql数据库 优化
    MySql 索引
    Kibana 安装
  • 原文地址:https://www.cnblogs.com/kunixiwa/p/8196674.html
Copyright © 2011-2022 走看看