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实现基于HTTP文件传输实例
Nov 08 Python
python中requests模块的使用方法
Apr 08 Python
python中安装Scrapy模块依赖包汇总
Jul 02 Python
Python机器学习k-近邻算法(K Nearest Neighbor)实例详解
Jun 25 Python
Python面向对象之接口、抽象类与多态详解
Aug 27 Python
python 使用sys.stdin和fileinput读入标准输入的方法
Oct 17 Python
Python matplotlib画图与中文设置操作实例分析
Apr 23 Python
python简单鼠标自动点击某区域的实例
Jun 25 Python
解决pyCharm中 module 调用失败的问题
Feb 12 Python
python中执行smtplib失败的处理方法
Jul 01 Python
python 如何停止一个死循环的线程
Nov 24 Python
Python中22个万用公式的小结
Jul 21 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
珊瑚虫IP库浅析
2007/02/15 PHP
PHP-CGI进程CPU 100% 与 file_get_contents 函数的关系分析
2011/08/15 PHP
web目录下不应该存在多余的程序(安全考虑)
2012/05/09 PHP
php中autoload的用法总结
2013/11/08 PHP
PHP实现QQ快速登录的方法
2016/09/28 PHP
jQuery温习篇 强大的JQuery选择器
2010/04/24 Javascript
利用原生JavaScript获取元素样式只是获取而已
2014/10/08 Javascript
使用jQuery实现星级评分代码分享
2014/12/09 Javascript
jQuery延迟加载图片插件Lazy Load使用指南
2015/03/25 Javascript
JavaScript DOM操作表格及样式
2015/04/13 Javascript
图文详解Heap Sort堆排序算法及JavaScript的代码实现
2016/05/04 Javascript
jQuery  ready方法实现原理详解
2016/10/19 Javascript
Vue引入jquery实现平滑滚动到指定位置
2018/05/09 jQuery
如何在js代码中消灭for循环实例详解
2018/07/29 Javascript
layui 根据后台数据动态创建下拉框并同时默认选中的实例
2019/09/02 Javascript
微信小程序中插入激励视频广告并获取收益(实例代码)
2019/12/06 Javascript
Vue.js中的高级面试题及答案
2020/01/13 Javascript
JavaScript使用canvas绘制随机验证码
2020/02/17 Javascript
OpenLayer学习之自定义测量控件
2020/09/28 Javascript
使用PyInstaller将Python程序文件转换为可执行程序文件
2016/07/08 Python
利用Python实现颜色色值转换的小工具
2016/10/27 Python
python模糊图片过滤的方法
2018/12/14 Python
python感知机实现代码
2019/01/18 Python
pycharm中显示CSS提示的知识点总结
2019/07/29 Python
django基础学习之send_mail功能
2019/08/07 Python
Python shelve模块实现解析
2019/08/28 Python
使用python创建生成动态链接库dll的方法
2020/05/09 Python
林清轩官方网站:山茶花润肤油开创者
2016/10/26 全球购物
Foot Locker澳洲官网:美国运动服和鞋类零售商
2019/10/11 全球购物
请写出 float x 与"零值"比较的 if 语句
2016/01/04 面试题
工商管理本科毕业生求职信范文
2013/10/05 职场文书
研修第一天随笔感言
2014/02/15 职场文书
《乌塔》教学反思
2014/02/17 职场文书
2014年档案管理员工作总结
2014/12/01 职场文书
个人先进材料范文
2014/12/30 职场文书
redis实现排行榜功能
2021/05/24 Redis