Python中解析JSON并同时进行自定义编码处理实例


Posted in Python onFebruary 08, 2015

在对文件内容或字符串进行JSON反序列化(deserialize)时,由于原始内容编码问题,可能需要对反序列化后的内容进行编码处理(如将unicode对象转换为str)。

在Python中,一种方式是先使用json.load或json.loads反序列化得到dict对象,然后对这个dict对象进行编码处理。

但其实在json.load与json.loads中,有可选参数object_hook。通过使用此参数,可以对反序列化得到的dict直接进行处理,并使用处理后新的dict替代原dict返回。

使用方法为:

d = json.loads(json_str, object_hook=_decode_dict)

附Shadowsocks中使用的_decode_dict与_decode_list:

def _decode_list(data):

    rv = []

    for item in data:

        if isinstance(item, unicode):

            item = item.encode('utf-8')

        elif isinstance(item, list):

            item = _decode_list(item)

        elif isinstance(item, dict):

            item = _decode_dict(item)

        rv.append(item)

    return rv

 

def _decode_dict(data):

    rv = {}

    for key, value in data.iteritems():

        if isinstance(key, unicode):

            key = key.encode('utf-8')

        if isinstance(value, unicode):

            value = value.encode('utf-8')

        elif isinstance(value, list):

            value = _decode_list(value)

        elif isinstance(value, dict):

            value = _decode_dict(value)

        rv[key] = value

    return rv

参考:
1.https://docs.python.org/2/library/json.html
2.https://github.com/clowwindy/shadowsocks/blob/master/shadowsocks/utils.py

Python 相关文章推荐
Python之PyUnit单元测试实例
Oct 11 Python
Python 序列化 pickle/cPickle模块使用介绍
Nov 30 Python
在IIS服务器上以CGI方式运行Python脚本的教程
Apr 25 Python
Python使用bs4获取58同城城市分类的方法
Jul 08 Python
Python切换pip安装源的方法详解
Nov 18 Python
老生常谈进程线程协程那些事儿
Jul 24 Python
Linux系统(CentOS)下python2.7.10安装
Sep 26 Python
python实现逐个读取txt字符并修改
Dec 24 Python
在Python中通过getattr获取对象引用的方法
Jan 21 Python
Python实现钉钉发送报警消息的方法
Feb 20 Python
Pytorch to(device)用法
Jan 08 Python
给keras层命名,并提取中间层输出值,保存到文档的实例
May 23 Python
Python Web框架Flask中使用七牛云存储实例
Feb 08 #Python
Python Web框架Flask中使用百度云存储BCS实例
Feb 08 #Python
Python Web框架Flask中使用新浪SAE云存储实例
Feb 08 #Python
Python中装饰器的一个妙用
Feb 08 #Python
Python中使用HTMLParser解析html实例
Feb 08 #Python
Pyhton中防止SQL注入的方法
Feb 05 #Python
Windows系统下安装Python的SSH模块教程
Feb 05 #Python
You might like
PHP实现将科学计数法转换为原始数字字符串的方法
2014/12/16 PHP
PHP精确到毫秒秒杀倒计时实例详解
2019/03/14 PHP
JavaScript按值删除数组元素的方法
2015/04/24 Javascript
jquery 无限极下拉菜单的简单实例(精简浓缩版)
2016/05/31 Javascript
JS继承之借用构造函数继承和组合继承
2016/09/07 Javascript
利用jquery禁止外层滚动条的滚动
2017/01/05 Javascript
html中通过JS获取JSON数据并加载的方法
2017/11/30 Javascript
基于vue.js中关于下拉框的值默认及绑定问题
2018/08/22 Javascript
详解vue中多个有顺序要求的异步操作处理
2019/10/29 Javascript
JavaScript之Blob对象类型的具体使用方法
2019/11/29 Javascript
JavaScript实现拖拽功能
2020/02/11 Javascript
详解React 元素渲染
2020/07/07 Javascript
给Python IDLE加上自动补全和历史功能
2014/11/30 Python
Python爬取京东的商品分类与链接
2016/08/26 Python
恢复百度云盘本地误删的文件脚本(简单方法)
2017/10/21 Python
python MySQLdb使用教程详解
2018/03/20 Python
python实现自主查询实时天气
2018/06/22 Python
Python批处理删除和重命名文件夹的实例
2018/07/11 Python
Scrapy使用的基本流程与实例讲解
2018/10/21 Python
python实现超市商品销售管理系统
2019/10/25 Python
如何理解python对象
2020/06/21 Python
keras的ImageDataGenerator和flow()的用法说明
2020/07/03 Python
python实现人工蜂群算法
2020/09/18 Python
CSS3 实用技巧:实现黑白图像效果示例代码
2013/07/11 HTML / CSS
CSS3实现大小不一的粒子旋转加载动画
2016/04/21 HTML / CSS
css3针对移动端卡顿问题的解决(动画性能优化)
2020/02/14 HTML / CSS
基于Html5 canvas实现裁剪图片和马赛克功能及又拍云上传图片 功能
2019/07/09 HTML / CSS
美国在线自行车商店:Jenson USA
2018/05/22 全球购物
西班牙购买行李箱和背包网站:Maletas Greenwich
2019/10/08 全球购物
巴西购物网站:Submarino
2020/01/19 全球购物
英语演讲稿范文
2014/01/03 职场文书
社区工作感言
2014/02/21 职场文书
我的中国梦演讲稿高中篇
2014/08/19 职场文书
学习型家庭事迹材料(2016精选版)
2016/02/29 职场文书
Python使用sql语句对mysql数据库多条件模糊查询的思路详解
2021/04/12 Python
Python import模块的缓存问题解决方案
2021/06/02 Python