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调用Moxa PCOMM Lite通过串口Ymodem协议实现发送文件
Aug 15 Python
Python中Continue语句的用法的举例详解
May 14 Python
简单掌握Python中glob模块查找文件路径的用法
Jul 05 Python
Python 正则表达式入门(初级篇)
Dec 07 Python
详解Python文本操作相关模块
Jun 22 Python
Python数据操作方法封装类实例
Jun 23 Python
python实现图像识别功能
Jan 29 Python
python实现单向链表详解
Feb 08 Python
python实现事件驱动
Nov 21 Python
Python可变和不可变、类的私有属性实例分析
May 31 Python
详解pandas中MultiIndex和对象实际索引不一致问题
Jul 23 Python
基于Python 的语音重采样函数解析
Jul 06 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
ThinkPHP中的常用查询语言汇总
2014/08/22 PHP
php验证码生成代码
2015/11/11 PHP
linux下为php添加iconv模块的方法
2016/02/28 PHP
Zend Framework框架教程之Zend_Db_Table_Rowset用法实例分析
2016/03/21 PHP
实例分析PHP中PHPMailer发邮件
2017/12/13 PHP
基于Jquery+Ajax+Json实现分页显示附效果图
2014/07/30 Javascript
jquery判断当前浏览器的实现代码
2015/11/07 Javascript
JS跨域请求外部服务器的资源
2017/02/06 Javascript
深入理解vue $refs的基本用法
2017/07/13 Javascript
javascript标准库(js的标准内置对象)总结
2018/05/26 Javascript
VUE DOM加载后执行自定义事件的方法
2018/09/07 Javascript
js监听html页面的上下滚动事件方法
2018/09/11 Javascript
AngularJS实现的自定义过滤器简单示例
2019/02/02 Javascript
搭建一个Koa后端项目脚手架的方法步骤
2019/05/30 Javascript
Vue登录主页动态背景短视频制作
2019/09/21 Javascript
跟老齐学Python之一个免费的实验室
2014/09/14 Python
Python自动重试HTTP连接装饰器
2015/04/28 Python
Python利用Nagios增加微信报警通知的功能
2016/02/18 Python
Python实现的密码强度检测器示例
2017/08/23 Python
深入理解Django的自定义过滤器
2017/10/17 Python
python2 与python3的print区别小结
2018/01/16 Python
vivo智能手机官方商城:vivo
2016/09/22 全球购物
库房主管岗位职责
2013/12/31 职场文书
小学生新年寄语
2014/04/03 职场文书
导游个人求职信
2014/04/25 职场文书
员工保密承诺书
2014/05/28 职场文书
服务标语大全
2014/06/18 职场文书
我爱家乡演讲稿
2014/09/12 职场文书
2014年大学生党员评议表自我评价
2014/09/20 职场文书
上帝也疯狂观后感
2015/06/09 职场文书
公司业务员管理制度
2015/08/05 职场文书
一看就懂的MySQL的聚簇索引及聚簇索引是如何长高的
2021/05/25 MySQL
Python实现自动玩连连看的脚本分享
2022/04/04 Python
golang连接MySQl使用sqlx库
2022/04/14 Golang
python井字棋游戏实现人机对战
2022/04/28 Python
Win11怎么添加用户?Win11添加用户账户的方法
2022/07/15 数码科技