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 相关文章推荐
Flask SQLAlchemy一对一,一对多的使用方法实践
Feb 10 Python
python开发之文件操作用法实例
Nov 13 Python
Python的dict字典结构操作方法学习笔记
May 07 Python
Flask框架的学习指南之制作简单blog系统
Nov 20 Python
Python实现树的先序、中序、后序排序算法示例
Jun 23 Python
python-opencv在有噪音的情况下提取图像的轮廓实例
Aug 30 Python
Tensorflow卷积神经网络实例进阶
May 24 Python
pycharm下查看python的变量类型和变量内容的方法
Jun 26 Python
Python通过4种方式实现进程数据通信
Mar 12 Python
Idea安装python显示无SDK问题解决方案
Aug 12 Python
基于CentOS搭建Python Django环境过程解析
Aug 24 Python
python 带时区的日期格式化操作
Oct 23 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
环境会对咖啡种植有什么影响
2021/03/03 咖啡文化
一个从别的网站抓取信息的例子(域名查询)
2006/10/09 PHP
php根据isbn书号查询amazon网站上的图书信息的示例
2014/02/13 PHP
PHP中的排序函数sort、asort、rsort、krsort、ksort区别分析
2014/08/18 PHP
ThinkPHP无限级分类原理实现留言与回复功能实例
2014/10/31 PHP
php获取图片信息的方法详解
2015/12/10 PHP
laravel通用化的CURD的实现
2019/12/13 PHP
Ucren Virtual Desktop V2.0
2006/11/07 Javascript
用 javascript 实现的点击复制代码
2007/03/24 Javascript
JS下高效拼装字符串的几种方法比较与测试代码
2010/04/15 Javascript
基于jquery的表格排序
2010/09/11 Javascript
jquery检测input checked 控件是否被选中的方法
2014/03/26 Javascript
使用angular写一个hello world
2015/01/23 Javascript
javascript判断复选框是否选中的方法
2015/10/16 Javascript
JS字符串的切分用法实例
2016/02/22 Javascript
js检查是否关闭浏览器的方法
2016/08/02 Javascript
基于JavaScript实现点击页面任何位置返回
2016/08/31 Javascript
AngularJS定时器的使用与移除操作方法【interval与timeout】
2016/12/14 Javascript
echarts学习笔记之箱线图的分析与绘制详解
2017/11/22 Javascript
js实现录音上传功能
2019/11/22 Javascript
python scrapy爬虫代码及填坑
2019/08/12 Python
python 动态调用函数实例解析
2019/10/21 Python
python 实现将小图片放到另一个较大的白色或黑色背景图片中
2019/12/12 Python
python属于软件吗
2020/06/18 Python
基于tf.shape(tensor)和tensor.shape()的区别说明
2020/06/30 Python
Python基于template实现字符串替换
2020/11/27 Python
澳大利亚最大的女装零售商:Millers
2017/09/10 全球购物
澳大利亚连衣裙和女装在线:Esther
2017/11/11 全球购物
网络工程师专家职业发展路线
2014/02/14 职场文书
感恩节活动策划方案
2014/05/16 职场文书
公安民警正风肃纪剖析材料
2014/10/10 职场文书
英语复习计划
2015/01/19 职场文书
2015年团支部年度工作总结
2015/05/27 职场文书
白银帝国观后感
2015/06/17 职场文书
postman中form-data、x-www-form-urlencoded、raw、binary的区别介绍
2022/01/18 HTML / CSS
ubuntu如何搭建vsftpd服务器
2022/12/24 Servers