文档章节

Python类转json

刘燕阳
 刘燕阳
发布于 2017/01/18 12:31
字数 199
阅读 30
收藏 0
import json
import codecs

def utf16_le_to_utf_8(data):
    decode = codecs.getdecoder('utf_16_le')
    rv = decode(data)[0]
    return rv

def _to_json_obj(src, anchor=None):

    def _judge_anchor(_item, _src, _anchor):
        __anchor = _anchor if isinstance(_src, (tuple, list, dict)) else _src
        _valid_item = True if not isinstance(_anchor, type(_item)) else False
        return _valid_item, __anchor

    def _build_in_to_json_obj(_src):
        if isinstance(_src, bytes):
            _dst = utf16_le_to_utf_8(_src)
        else:
            _dst = _src
        return _dst

    def _list_to_json_obj(_src, _anchor=None):
        _dst = []
        for i in range(0, len(_src)):
            _dst.append(_to_json_obj(_src[i], anchor=_anchor))
        return _dst

    def _dict_to_json_obj(_src, _anchor=None):
        _dst = dict()
        for k, v in _src.items():
            _dst[k] = _to_json_obj(v, anchor=_anchor)
        return _dst

    def _class_to_json_obj(_src, _anchor=None):
        _dst = dict()
        for k, v in _src.__dict__.items():
            valid_item, __anchor = _judge_anchor(v, _src, _anchor)
            if valid_item:
                _dst[k] = _to_json_obj(v, anchor=__anchor)
        return _dst

    if isinstance(src, (type(None), bool, int, float, str, bytes)):
        dst = _build_in_to_json_obj(src)
    elif isinstance(src, (list, tuple)):
            dst = _list_to_json_obj(src, _anchor=anchor)
    elif isinstance(src, dict):
            dst = _dict_to_json_obj(src, _anchor=anchor)
    else:
            dst = _class_to_json_obj(src, _anchor=anchor)
    return dst


def to_json_str(anything):
    obj = _to_json_obj(anything)
    return json.dumps(obj, indent=4, ensure_ascii=False)

© 著作权归作者所有

下一篇: JNI的写法
刘燕阳
粉丝 0
博文 102
码字总数 8944
作品 0
通州
私信 提问
python之 字典顺序 与 md5 与 json转字符串跨语言对接

前言: 在这里先说明标题python为什么没有指明版本。因为我这次讲述的一个把py2代码改为py3代码的真实实例。 背景: 笔者有个项目,笔者的python项目需要与后端.Net用md5加密对接api。结果调...

開援带碼
04/19
16
0
列表--元组--字典--import join

--9-----------Python 列表 list-----------用[]标识----------------------------------------------------------------------------------------------- List(列表) 是 Python 中使用最频......

liapple6
2018/10/28
0
0
使用python一步一步搭建微信公众平台(二)----搭建一个中英互译的翻译工具

距离上次写使用python一步一步搭建微信公众平台(一)已经有几个月了,当中自已也搭建了一个中英文互译的小应用,可是由于英文翻中文好弄,中文翻译成英文一直有问题,知道是编码的问题,但是...

Kevin_Yang
2014/01/19
23K
39
python序列化数据本地存放

深入# 序列化的概念很简单。内存里面有一个数据结构,你希望将它保存下来,重 用,或者发送给其他人。你会怎么做?嗯, 这取决于你想要怎么保存,怎么重用,发送给谁。很多游戏允许你在退出的...

临峰不畏
2015/01/18
1K
0
OOREDIS:一个Pythonic的Redis库

转自 NoSQLfan 作者:nosqlfan 感谢OOREDIS作者huangz同学的投递! 用Redis的朋友们应该会发现,Redis的很多客户端都只是Redis命令的一个简单包装。 举个例子,在Redis的Python客户端redis-p...

小卒过河
2011/08/07
517
0

没有更多内容

加载失败,请刷新页面

加载更多

OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
昨天
5
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
昨天
6
0
数据库中间件MyCat

什么是MyCat? 查看官网的介绍是这样说的 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵...

沉浮_
昨天
6
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
昨天
7
0
常用物流快递单号查询接口种类及对接方法

目前快递查询接口有两种方式可以对接,一是和顺丰、圆通、中通、天天、韵达、德邦这些快递公司一一对接接口,二是和快递鸟这样第三方集成接口一次性对接多家常用快递。第一种耗费时间长,但是...

程序的小猿
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部