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网络编程示例(客户端与服务端)
Apr 24 Python
初学Python函数的笔记整理
Apr 07 Python
用Python编写简单的定时器的方法
May 02 Python
python实现数独算法实例
Jun 09 Python
python 环境变量和import模块导入方法(详解)
Jul 11 Python
python的mysqldb安装步骤详解
Aug 14 Python
Python去除、替换字符串空格的处理方法
Apr 01 Python
Appium+python自动化之连接模拟器并启动淘宝APP(超详解)
Jun 17 Python
python字符串替换re.sub()方法解析
Sep 18 Python
如何解决tensorflow恢复模型的特定值时出错
Feb 06 Python
简单了解Python变量作用域正确使用方法
Jun 12 Python
numpy 矩阵形状调整:拉伸、变成一位数组的实例
Jun 18 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中Fatal error session_start()错误解决步骤
2014/08/05 PHP
CodeIgniter针对lighttpd服务器URL重写的方法
2015/06/10 PHP
layui框架实现文件上传及TP3.2.3(thinkPHP)对上传文件进行后台处理操作示例
2018/05/12 PHP
Django中通过定时任务触发页面静态化的处理方式
2018/08/29 PHP
Thinkphp 框架基础之入口文件功能、定义与用法分析
2020/04/27 PHP
angularjs指令中的compile与link函数详解
2014/12/06 Javascript
js实现登陆遮罩效果的方法
2015/07/28 Javascript
第一次接触神奇的前端框架vue.js
2016/12/01 Javascript
js判断是否是手机页面
2017/03/17 Javascript
jQuery实现form表单序列化转换为json对象功能示例
2018/05/23 jQuery
详解js中Array的方法及技巧
2018/09/12 Javascript
详解小程序云开发数据库
2019/05/20 Javascript
Vue 列表上下过渡效果的实例代码
2019/06/25 Javascript
js实现简单页面全屏
2019/09/17 Javascript
js实现课堂随机点名系统
2019/11/21 Javascript
js Math数学简单使用操作示例
2020/03/13 Javascript
JS快速实现简单计算器
2020/04/08 Javascript
浅谈Vuex的this.$store.commit和在Vue项目中引用公共方法
2020/07/24 Javascript
[41:52]2018DOTA2亚洲邀请赛3月29日小组赛B组Effect VS Secret
2018/03/30 DOTA
浅析python 中__name__ = '__main__' 的作用
2014/07/05 Python
Python实现简单字典树的方法
2016/04/29 Python
在PyCharm中实现关闭一个死循环程序的方法
2018/11/29 Python
梅尔倒谱系数(MFCC)实现
2019/06/19 Python
python自动循环定时开关机(非重启)测试
2019/08/26 Python
详解pyinstaller selenium python3 chrome打包问题
2019/10/18 Python
Python中实现输入一个整数的案例
2020/05/03 Python
详解Java中一维、二维数组在内存中的结构
2021/02/11 Python
英国领先的品牌珠宝和配件供应商:Acotis Jewellery
2018/03/07 全球购物
统计岗位职责
2014/02/21 职场文书
《永远的白衣战士》教学反思
2014/04/25 职场文书
产品生产计划书
2014/05/07 职场文书
酒店节能减排方案
2014/05/26 职场文书
街道党风廉政建设调研报告
2015/01/01 职场文书
2015年党风廉政建设目标责任书
2015/05/08 职场文书
2015年初中教务处工作总结
2015/07/21 职场文书
2016中秋晚会开幕词
2016/03/03 职场文书