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导出Excel图表以及导出为图片的方法
Nov 07 Python
Python实现自动为照片添加日期并分类的方法
Sep 30 Python
Python中使用支持向量机(SVM)算法
Dec 26 Python
Ubuntu下使用Python实现游戏制作中的切分图片功能
Mar 30 Python
Python常见内置高效率函数用法示例
Jul 31 Python
pygame游戏之旅 游戏中添加显示文字
Nov 20 Python
Python学习笔记之For循环用法详解
Aug 14 Python
pycharm部署、配置anaconda环境的教程
Mar 24 Python
Pytest如何使用skip跳过执行测试
Aug 13 Python
python中使用.py配置文件的方法详解
Nov 23 Python
python利用opencv实现颜色检测
Feb 23 Python
python小程序之飘落的银杏
Apr 17 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中开发XML应用程序之基础篇 添加节点 删除节点 查询节点 查询节
2010/07/09 PHP
PHP中文分词的简单实现代码分享
2011/07/17 PHP
php session_start()出错原因分析及解决方法
2013/10/28 PHP
php 从一个数组中随机的取出若干个不同的数实例
2016/12/31 PHP
多个Laravel项目如何共用migrations详解
2018/09/25 PHP
使用jQuery操作Cookies的实现代码
2011/10/09 Javascript
JavaScript的继承的封装介绍
2013/10/15 Javascript
jQuery判断指定id的对象是否存在的方法
2015/05/22 Javascript
基于Jquery实现仿百度百科右侧导航代码附源码下载
2015/11/27 Javascript
vue+vuecli+webpack中使用mockjs模拟后端数据的示例
2017/10/24 Javascript
浅谈使用React.setState需要注意的三点
2017/12/18 Javascript
vue使用中的内存泄漏【推荐】
2018/07/10 Javascript
基于Nodejs的Tcp封包和解包的理解
2018/09/19 NodeJs
node事件循环和process模块实例分析
2020/02/14 Javascript
JavaScript实现点击切换功能
2021/01/27 Javascript
[01:34]2014DOTA2展望TI 剑指西雅图VG战队专访
2014/06/30 DOTA
[46:40]VGJ.T vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
在Python的Django框架中显示对象子集的方法
2015/07/21 Python
浅谈Python类里的__init__方法函数,Python类的构造函数
2016/12/10 Python
python 二分查找和快速排序实例详解
2017/10/13 Python
python利用re,bs4,requests模块获取股票数据
2019/07/29 Python
python保留小数位的三种实现方法
2020/01/07 Python
keras 回调函数Callbacks 断点ModelCheckpoint教程
2020/06/18 Python
详解CSS3弹性伸缩盒
2020/09/21 HTML / CSS
基于HTML5+CSS3实现简单的时钟效果
2017/09/11 HTML / CSS
世界上最值得信赖的多日游在线市场:TourRadar
2018/07/20 全球购物
库存图片、照片、矢量图、视频和音乐:Shutterstock
2021/02/12 全球购物
批评与自我批评材料
2014/02/15 职场文书
管事部库房保管员岗位职责
2014/02/21 职场文书
情人节活动策划方案
2014/02/27 职场文书
法人委托书范本
2014/04/04 职场文书
小学教师岗位职责
2015/04/02 职场文书
学习社交礼仪心得体会
2016/01/22 职场文书
2016保送生自荐信范文
2016/01/29 职场文书
《植树问题》教学反思
2016/03/03 职场文书
Mysql索引失效 数据库表中有索引还是查询很慢
2022/05/15 MySQL