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的Flask框架中SQLAlchemy使用时的乱码问题解决
Nov 07 Python
基于python3 类的属性、方法、封装、继承实例讲解
Sep 19 Python
Python实现简单的HttpServer服务器示例
Sep 25 Python
python微信跳一跳游戏辅助代码解析
Jan 29 Python
python实现简单tftp(基于udp协议)
Jul 30 Python
django-rest-swagger对API接口注释的方法
Aug 29 Python
PyQt5实现登录页面
May 30 Python
Python3实现英文字母转换哥特式字体实例代码
Sep 01 Python
基于python实现复制文件并重命名
Sep 16 Python
python反扒机制的5种解决方法
Feb 06 Python
教你怎么用Python实现多路径迷宫
Apr 29 Python
Jupyter Notebook 如何修改字体和大小以及更改字体样式
Jun 03 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
支持php4、php5的mysql数据库操作类
2008/01/10 PHP
php+mysql写的简单留言本实例代码
2008/07/25 PHP
php 广告调用类代码(支持Flash调用)
2011/08/11 PHP
php用正则表达式匹配URL的简单方法
2013/11/12 PHP
php 输入输出流详解及示例代码
2016/08/25 PHP
PHP简单实现模拟登陆功能示例
2017/09/15 PHP
使用PHP+MySql实现微信投票功能实例代码
2017/09/29 PHP
JavaScript 函数式编程的原理
2009/10/16 Javascript
用JQuery调用Session的实现代码
2010/10/29 Javascript
jQuery提交多个表单的小例子
2013/06/30 Javascript
使用jQuery实现的掷色子游戏动画效果
2014/03/14 Javascript
jQuery判断复选框是否勾选的原理及示例
2014/05/21 Javascript
JQuery显示隐藏DIV的方法及代码实例
2015/04/16 Javascript
JavaScript通过setTimeout实时显示当前时间的方法
2015/04/16 Javascript
js判断手机访问或者PC的几个例子(常用于手机跳转)
2015/12/15 Javascript
使用NodeJs 开发微信公众号(三)微信事件交互实例
2016/03/02 NodeJs
JavaScript常用判断写法大全(推荐)
2016/05/30 Javascript
IOS中safari下的select下拉菜单文字过长不换行的解决方法
2016/09/26 Javascript
JavaScript 获取元素在父节点中的下标(推荐)
2017/06/28 Javascript
element-ui 时间选择器限制范围的实现(随动)
2019/01/09 Javascript
JS实现将对象转化为数组的方法分析
2019/01/21 Javascript
[01:38]2018DOTA2亚洲邀请赛主赛事第二日现场采访 神秘商人痛陈生计不易
2018/04/05 DOTA
以视频爬取实例讲解Python爬虫神器Beautiful Soup用法
2016/01/20 Python
python 多线程重启方法
2019/02/18 Python
浅析python,PyCharm,Anaconda三者之间的关系
2019/11/27 Python
Python中的X[:,0]、X[:,1]、X[:,:,0]、X[:,:,1]、X[:,m:n]和X[:,:,m:n]
2020/02/13 Python
Django 自定义404 500等错误页面的实现
2020/03/08 Python
浅析Python 条件控制语句
2020/07/15 Python
HTML5 WebSocket实现点对点聊天的示例代码
2018/01/31 HTML / CSS
如何手工释放资源
2013/12/15 面试题
现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供reset
2012/11/09 面试题
升国旗仪式主持词
2014/03/19 职场文书
婚纱摄影师求职信范文
2014/04/17 职场文书
2015年幼儿园元旦亲子活动方案
2014/12/09 职场文书
2015年技术工作总结范文
2015/04/20 职场文书
实习单位意见
2015/06/04 职场文书