【服务后端】Python序列化对象为Json方法

方法非常简单,用isinstance函数识别出变量类型,递归调用函数分解到原子类型的变量,序列化。

缺点是递归调用会有函数栈,复杂的对象可能占用较大内存

"""
        继承自simplejson的编码基类,用于处理复杂类型的编码
"""
def JsonCode(obj):
    def _any(obj):  
        ret = None

#debug(‘temp‘,type(obj),obj)
        #查询结果集处理
        if isinstance(obj,QuerySet):           
            ret = _list(obj)       
        #单个结果处理
        elif isinstance(obj,models.Model):
            ret = _model(obj)
        #list处理
        elif isinstance(obj,list):
            ret = _list(obj)
        #字典处理,字典还是需要处理
        elif isinstance(obj,dict):
            #ret = obj#_dict(obj)
            ret = _dict(obj)
           
        #日期时间类型转换
        elif isinstance(obj,datetime.datetime):
            ret = obj.strftime(‘%Y-%m-%d %H:%M:%S‘)
       
        #日期类型转换
        elif isinstance(obj,datetime.date):
            ret = obj.strftime(‘%Y-%m-%d‘)
           
        #字符串或者unicode编码的直接返回
        elif isinstance(obj, str) or isinstance(obj, unicode):
            ret = obj
        else:
            ret = str(obj)
        return ret
    #model
    def _model(obj):
        ret = {}
        for item in obj._meta.fields:
            #id不要返回,外键怎么处理?
            #if item.attname == ‘id‘:
            #    continue
            ret[item.attname] = _any(getattr(obj, item.attname))
        return ret
   
    def _list(obj):
        ret = []
        for item in obj:
            ret.append(_any(item))
        return ret
   
    def _dict(obj):
        #20160429  修改ret=[]  为 ret={},因为需要返回的数据是字典
        ret = {}
        # _dict  {‘Name‘: ‘Zara‘, ‘Age‘: 7}
        #Items()  -> [(‘Age‘, 7), (‘Name‘, ‘Zara‘)]
        for k,v in obj.items():
            #print k,v
            ret[k] = _any(v)
        return ret
   
    #调用_any主入口,返回字典
    return _any(obj)

时间: 2024-12-14 05:35:44

【服务后端】Python序列化对象为Json方法的相关文章

Python序列化与反序列化-json与pickle

Python序列化与反序列化-json与pickle 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.json的序列化方式与反序列化方式 1>.json序列化 1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90

6.python序列化功能之json&pickle

json模块是个非常重要的模块,可以实现任何语言之间跨平台的数据交换,还可以实现一些比较简单的数据类型的持久化.(这里的持久化就是说,把python内部一些比较简单的数据类型,比如说像字符串,列表,元组,字典之类的数据类型,转换为json字符串的标准格式,保存到硬盘中.) json模块常用函数: json.dumps():将python以字典为主的数据类型,包括(列表,元组,等)转换为json字符串. json.loads():将json字符串转换为python可识别的数据类型. json.du

利用fastjson序列化对象为JSON

利用fastjson序列化对象为JSON 参考博客:http://blog.csdn.net/zeuskingzb/article/details/17468079 Step1:定义实体类 //用户类 public class User { private Long id; private String name; //增加get/set方法 } //定义组,1组有多个用户 public class Group { private Long id; private String name; pr

python 序列化 pickle和json

我们把对象(变量)从内存中变成可存储或传输的过程称为序列化,在Python中用pickle或json标准库.序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输的别的计算机上. pickle:支持Python里所有的数据类型(包括函数) json:支持str,int,tule,list,dict 如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为json,因为json表示出来就是一个字符串,可以被所以语言所读取,也可以方便地存储到磁盘

python序列化之pickle,json,shelve

模块 支持方法 说明 json dumps/dump loads/load 只能处理基本数据类型: 用于多种语言间的数据传输: pickle dumps/dump loads/load 支持python所有数据类型: 用于python程序间互相传输对象: pickle反序列化后的对象与原对象是等值的副本对象,类似于deepcopy shelve open close 以键值对的形式保存数据,可直接操作文件 原文地址:https://www.cnblogs.com/stin/p/8350749.h

python序列化与反序列化——json与pickle

一.定义 序列化是指将对象从内存中取出来写入存储区,如txt文件中,反序列则相反. 二. 应用场景 跨平台数据传输: 保留上一次运行程序时对对象的修改 三. 模块和函数 1. json dumps().dump()(序列化) loads().load() (反序列化) 2. pickle dumps().dump()(序列化) loads().load ()(反序列化) 四.  应用案例 1. pickle 1 import pickle 2 3 info = {"lyrics": &

c# 序列化对象为xml 方法

public static string XmlUtils(object obj, bool omitXmlDeclaration = true, bool indent = false, bool useNameSpace = false) { var sb = new StringBuilder(); using (var xw = XmlWriter.Create(sb, new XmlWriterSettings() { OmitXmlDeclaration = omitXmlDecla

转载:在ASP.net 3.5中 用JSON序列化对象(两种方法)

asp.net3.5中已经集成了序列化对象为json的方法. 1:System.Runtime.Serialization.Json;    2:System.Web.Script.Serialization两个命名空间下的不同方法进行序列化和反序列化. 第一种方法:System.Runtime.Serialization.Json public class JsonHelper    {        /// <summary>        /// 生成Json格式        /// 

Newtonsoft.Json.4.5.0 序列化与反序列化json字符串使用方法总结

在VS里下载安装: Json.NET 5.0.6 http://www.nuget.org/packages/Newtonsoft.Json/5.0.6 反序列化json字符串为List: json字符串如下: 1 {"docs": [{ 2 "uid": 2629577, 3 "nickname": "枕边疯电台", 4 "is_v": "true", 5 "category