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 相关文章推荐
pycharm 使用心得(一)安装和首次使用
Jun 05 Python
Python3 正在毁灭 Python的原因分析
Nov 28 Python
用Python进行一些简单的自然语言处理的教程
Mar 31 Python
python3+requests接口自动化session操作方法
Oct 13 Python
python用插值法绘制平滑曲线
Feb 19 Python
python中文分词库jieba使用方法详解
Feb 11 Python
Python 抓取数据存储到Redis中的操作
Jul 16 Python
matplotlib教程——强大的python作图工具库
Oct 15 Python
python中pop()函数的语法与实例
Dec 01 Python
python中字符串的编码与解码详析
Dec 03 Python
解决pycharm修改代码后第一次运行不生效的问题
Feb 06 Python
pandas 按日期范围筛选数据的实现
Feb 20 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
CI框架学习笔记(一) - 环境安装、基本术语和框架流程
2014/10/26 PHP
PHP如何通过表单直接提交大文件详解
2019/01/08 PHP
在PHP中输出JS语句以及乱码问题的解决方案
2019/02/13 PHP
jQuery 开发者应该注意的9个错误
2012/05/03 Javascript
HTML长文本截取含有HTML代码同样适用的两种方法
2013/07/31 Javascript
深入解析JavaScript编程中的this关键字使用
2015/11/09 Javascript
JS表单验证的代码(常用)
2016/04/08 Javascript
JavaScript中的this使用详解
2016/07/27 Javascript
JS防止网页被嵌入iframe框架的方法分析
2016/09/13 Javascript
实现easyui的datagrid导出为excel的示例代码
2016/11/10 Javascript
Servlet实现文件上传,可多文件上传示例
2016/12/05 Javascript
利用javascript实现的三种图片放大镜效果实例(附源码)
2017/01/23 Javascript
JavaScript 实现 Tab 点击切换实例代码
2017/03/25 Javascript
nodejs和C语言插入mysql数据库乱码问题的解决方法
2017/04/14 NodeJs
详解vue中组件参数
2018/07/09 Javascript
一个Vue视频媒体多段裁剪组件的实现示例
2018/08/09 Javascript
vuejs 动态添加input框的实例讲解
2018/08/24 Javascript
js判断浏览器的环境(pc端,移动端,还是微信浏览器)
2020/12/24 Javascript
跟老齐学Python之有容乃大的list(1)
2014/09/14 Python
python和shell实现的校验IP地址合法性脚本分享
2014/10/23 Python
python实现简单socket程序在两台电脑之间传输消息的方法
2015/03/13 Python
在Python程序中实现分布式进程的教程
2015/04/28 Python
Linux-ubuntu16.04 Python3.5配置OpenCV3.2的方法
2018/04/02 Python
WIn10+Anaconda环境下安装PyTorch(避坑指南)
2019/01/30 Python
对python实现模板生成脚本的方法详解
2019/01/30 Python
安装docker-compose的两种最简方法
2019/07/30 Python
python实现广度优先搜索过程解析
2019/10/19 Python
Python爬虫抓取指定网页图片代码实例
2020/07/24 Python
浅谈Python描述数据结构之KMP篇
2020/09/06 Python
python线程优先级队列知识点总结
2021/02/28 Python
Juice Beauty官网:有机美容产品,护肤与化妆品
2020/06/13 全球购物
钳工实习自我鉴定
2013/09/19 职场文书
少先队学雷锋活动月总结
2014/03/09 职场文书
给学校建议书范文
2014/05/13 职场文书
小学美术兴趣小组活动总结
2014/07/07 职场文书
2014年乡镇纪委工作总结
2014/12/19 职场文书