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 Mysql数据库操作 Perl操作Mysql数据库
Jan 12 Python
Python pickle模块用法实例
Apr 14 Python
Python计时相关操作详解【time,datetime】
May 26 Python
Python实现PS滤镜功能之波浪特效示例
Jan 26 Python
Tensorflow使用支持向量机拟合线性回归
Sep 07 Python
python模拟登陆,用session维持回话的实例
Dec 27 Python
python+OpenCV实现车牌号码识别
Nov 08 Python
使用Python来做一个屏幕录制工具的操作代码
Jan 18 Python
python 多线程死锁问题的解决方案
Aug 25 Python
python中entry用法讲解
Dec 04 Python
python opencv肤色检测的实现示例
Dec 21 Python
Python Django模型详解
Oct 05 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中VC6 X86和VC9 X86的区别及 Non Thread Safe的意思
2013/06/28 PHP
php二维数组用键名分组相加实例函数
2013/11/06 PHP
PHP simplexml_load_string()函数实例讲解
2019/02/03 PHP
PHP扩展Swoole实现实时异步任务队列示例
2019/04/13 PHP
PHP CURL中传递cookie的方法步骤
2019/05/09 PHP
JavaScript 提升运行速度之循环篇 译文
2009/08/15 Javascript
JS 参数传递的实际应用代码分析
2009/09/13 Javascript
锋利的jQuery 第三章章节总结的例子
2010/03/23 Javascript
js异常捕获方法介绍
2013/04/10 Javascript
javascript不可用的问题探究
2013/10/01 Javascript
jQuery实现可收缩展开的级联菜单实例代码
2013/11/27 Javascript
基于jQuery插件实现点击小图显示大图效果
2016/05/11 Javascript
深入理解Angularjs中的$resource服务
2016/12/31 Javascript
如何获取元素的最终background-color
2017/02/06 Javascript
详解使用Vue Router导航钩子与Vuex来实现后退状态保存
2017/09/11 Javascript
微信小程序异步处理详解
2017/11/10 Javascript
JS常见构造模式实例对比分析
2018/08/27 Javascript
js实现前端界面导航栏下拉列表
2020/08/27 Javascript
python提取具有某种特定字符串的行数据方法
2018/12/11 Python
Django logging配置及使用详解
2019/07/23 Python
PyInstaller将Python文件打包为exe后如何反编译(破解源码)以及防止反编译
2020/04/15 Python
Python调用jar包方法实现过程解析
2020/08/11 Python
Zadig&Voltaire官网:法国时装品牌
2018/01/05 全球购物
美国半成品食材配送服务商:Home Chef
2018/01/25 全球购物
Book Depository欧盟:一家领先的国际图书零售商
2019/05/21 全球购物
酒店实习个人鉴定
2013/12/07 职场文书
2014信息公开实施方案
2014/02/22 职场文书
竞选体育委员演讲稿
2014/04/26 职场文书
关于教师节的演讲稿
2014/09/04 职场文书
党员学习党的群众路线思想汇报(5篇)
2014/09/10 职场文书
校园主题婚礼活动策划方案
2014/09/15 职场文书
2014年化验员工作总结
2014/11/18 职场文书
2016党员学习心得体会范文
2016/01/23 职场文书
高一化学教学反思
2016/02/22 职场文书
HTML5 新增内容和 API详解
2021/11/17 HTML / CSS
Python语法学习之进程的创建与常用方法详解
2022/04/08 Python