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实现的一个自动售饮料程序代码分享
Aug 25 Python
python嵌套函数使用外部函数变量的方法(Python2和Python3)
Jan 31 Python
Python的re模块正则表达式操作
May 25 Python
Python的Django框架中使用SQLAlchemy操作数据库的教程
Jun 02 Python
Python实现曲线点抽稀算法的示例
Oct 12 Python
python使用KNN算法识别手写数字
Apr 25 Python
python使用 zip 同时迭代多个序列示例
Jul 06 Python
Python 脚本实现淘宝准点秒杀功能
Nov 13 Python
Python 词典(Dict) 加载与保存示例
Dec 06 Python
查看端口并杀进程python脚本代码
Dec 17 Python
python打开音乐文件的实例方法
Jul 21 Python
浅析Python 责任链设计模式
Sep 11 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解析html的实现代码
2011/08/08 PHP
php基于dom实现读取图书xml格式数据的方法
2017/02/03 PHP
老生常谈PHP面向对象之注册表模式
2017/05/26 PHP
window.showModalDialog使用手册
2007/01/11 Javascript
JavaScript使用技巧精萃[代码非常实用]
2008/11/21 Javascript
JavaScript学习点滴 call、apply的区别
2010/10/22 Javascript
javascript getElementsByTagName
2011/01/31 Javascript
myeclipse安装jQuery插件的方法
2011/03/29 Javascript
jquery索引在使用中的一些困惑
2013/10/24 Javascript
JavaScript中的console.dir()函数介绍
2014/12/29 Javascript
JQuery中Bind()事件用法分析
2015/05/05 Javascript
JavaScript中数据结构与算法(三):链表
2015/06/19 Javascript
JS模仿编辑器实时改变文本框宽度和高度大小的方法
2015/08/17 Javascript
jquery实现邮箱自动填充提示功能
2015/11/17 Javascript
Vue.js 2.0 和 React、Augular等其他前端框架大比拼
2016/10/08 Javascript
详解Angular2表单-模板驱动的表单(Template-Driven Forms)
2017/08/04 Javascript
Vue 中批量下载文件并打包的示例代码
2017/11/20 Javascript
js prototype和__proto__的关系是什么
2019/08/23 Javascript
五句话帮你轻松搞定js原型链
2020/12/09 Javascript
Python中staticmethod和classmethod的作用与区别
2018/10/11 Python
Python解决两个整数相除只得到整数部分的实例
2018/11/10 Python
pycharm 实现显示project 选项卡的方法
2019/01/17 Python
Python提取频域特征知识点浅析
2019/03/04 Python
python opencv鼠标事件实现画框圈定目标获取坐标信息
2020/04/18 Python
新百伦折扣店:Joe’s New Balance Outlet
2016/08/20 全球购物
电话销售经理岗位职责
2013/12/07 职场文书
中学生学雷锋演讲稿
2014/04/26 职场文书
社会学专业求职信
2014/07/17 职场文书
七夕相亲活动策划方案
2014/08/31 职场文书
2014年学习厉行节约反对浪费思想汇报
2014/09/10 职场文书
鲁冰花观后感
2015/06/10 职场文书
财务人员廉洁自律心得体会
2016/01/13 职场文书
Python max函数中key的用法及原理解析
2021/06/26 Python
Go 语言结构实例分析
2021/07/04 Golang
Python PIL按比例裁剪图片
2022/05/11 Python
MySQL实现用逗号进行拼接、以逗号进行分割
2022/12/24 MySQL