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之开始真正编程
Sep 12 Python
python3新特性函数注释Function Annotations用法分析
Jul 28 Python
python实现按任意键继续执行程序
Dec 30 Python
利用Python在一个文件的头部插入数据的实例
May 02 Python
python写入并获取剪切板内容的实例
May 31 Python
python调用百度语音REST API
Aug 30 Python
使用Python Pandas处理亿级数据的方法
Jun 24 Python
windows下python虚拟环境virtualenv安装和使用详解
Jul 16 Python
python 调用pyautogui 实时获取鼠标的位置、移动鼠标的方法
Aug 27 Python
使用Python生成200个激活码的实现方法
Nov 22 Python
零基础学python应该从哪里入手
Aug 11 Python
python中pathlib模块的基本用法与总结
Aug 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 MYSQL 数据备份类
2009/06/19 PHP
PHP中最容易忘记的一些知识点总结
2013/04/28 PHP
php统计文章排行示例
2014/03/04 PHP
php出现内存位置访问无效错误问题解决方法
2014/08/16 PHP
php自定义函数br2nl实现将html中br换行符转换为文本输入中换行符的方法【与函数nl2br功能相反】
2017/02/17 PHP
WHOOPS PHP调试库的使用
2017/09/29 PHP
php+js实现的拖动滑块验证码验证表单操作示例【附源码下载】
2020/05/27 PHP
新页面打开实际尺寸的图片
2006/08/25 Javascript
JavaScript中如何通过arguments对象实现对象的重载
2014/05/12 Javascript
jQuery实现鼠标可拖动调整表格列宽度
2014/05/26 Javascript
简单方法判断JavaScript对象为null或者属性为空
2014/09/26 Javascript
JavaScript中this的9种应用场景及三种复合应用场景
2015/09/12 Javascript
微信小程序实战之上拉(分页加载)效果(2)
2017/04/17 Javascript
js实现水平滚动菜单导航
2017/07/21 Javascript
原生JS实现的碰撞检测功能示例
2018/05/18 Javascript
vue.js使用v-model指令实现的数据双向绑定功能示例
2018/05/22 Javascript
详解react阻止无效重渲染的多种方式
2018/12/11 Javascript
vue(2.x,3.0)配置跨域代理
2019/11/27 Javascript
[01:39](回顾)各路豪强针锋相对,几经鏖战四强产生
2014/07/01 DOTA
Python中使用第三方库xlutils来追加写入Excel文件示例
2015/04/05 Python
Python基于分析Ajax请求实现抓取今日头条街拍图集功能示例
2018/07/19 Python
python三大神器之fabric使用教程
2019/06/10 Python
Python3 venv搭建轻量级虚拟环境的步骤(图文)
2019/08/09 Python
Python注释、分支结构、循环结构、伪“选择结构”用法实例分析
2020/01/09 Python
Python collections模块的使用方法
2020/10/09 Python
css3中less实现文字长阴影(long shadow)
2020/04/24 HTML / CSS
Parfume Klik丹麦:香水网上商店
2018/07/10 全球购物
爱奇艺VIP会员:大剧抢先看
2018/07/11 全球购物
整个世界的设计师家具在哈恩:Designathome
2019/03/25 全球购物
可持续木材、生态和铝制太阳镜:Proof Eyewear
2019/07/24 全球购物
2014教师评职称工作总结
2014/11/10 职场文书
幼儿园教师自荐书
2015/03/06 职场文书
2016年“世界环境日”校园广播稿
2015/12/18 职场文书
家庭教育教师培训学习体会
2016/01/14 职场文书
2016年第十四个公民道德宣传日活动总
2016/04/01 职场文书
Kubernetes关键组件与结构组成介绍
2022/03/31 Servers