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实现文本文件合并
Dec 29 Python
Python 专题六 局部变量、全局变量global、导入模块变量
Mar 20 Python
pycharm恢复默认设置或者是替换pycharm的解释器实例
Oct 29 Python
kafka-python批量发送数据的实例
Dec 27 Python
python读出当前时间精度到秒的代码
Jul 05 Python
用vue.js组件模拟v-model指令实例方法
Jul 05 Python
浅谈Python 递归算法指归
Aug 22 Python
python中的split()函数和os.path.split()函数使用详解
Dec 21 Python
kafka-python 获取topic lag值方式
Dec 23 Python
python shell命令行中import多层目录下的模块操作
Mar 09 Python
matlab、python中矩阵的互相导入导出方式
Jun 01 Python
pycharm中选中一个单词替换所有重复单词的实现方法
Nov 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
德生S2000南麂列岛台湾FM收听记录
2021/03/02 无线电
PHP 危险函数解释 分析
2009/04/22 PHP
php实现的百度搜索某地天气的小偷代码
2014/04/23 PHP
php  单例模式详细介绍及实现源码
2016/11/05 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
2018/06/13 PHP
PHP实现数组和对象的相互转换操作示例
2019/03/20 PHP
PHP ob缓存以及ob函数原理实例解析
2020/11/13 PHP
理解Javascript_09_Function与Object
2010/10/16 Javascript
jquery中邮箱地址 URL网站地址正则验证实例代码
2013/09/15 Javascript
设置点击文本框或图片弹出日历控件的实现代码
2016/05/12 Javascript
jQuery EasyUI tree 使用拖拽时遇到的错误小结
2016/10/10 Javascript
js仿微信语音播放实现思路
2016/12/12 Javascript
使用AngularJS2中的指令实现按钮的切换效果
2017/03/27 Javascript
Python不同目录间进行模块调用的实现方法
2019/01/29 Python
深入浅析Python 中的sklearn模型选择
2019/10/12 Python
Django项目基础配置和基本使用过程解析
2019/11/25 Python
使用Python构造hive insert语句说明
2020/06/06 Python
python中什么是面向对象
2020/06/11 Python
HTML5打开手机扫码功能及优缺点
2017/11/27 HTML / CSS
阿波罗盒子:Apollo Box
2017/08/14 全球购物
计算机本科生自荐信
2013/10/15 职场文书
党员学习十八大感想
2014/01/17 职场文书
婚假请假条怎么写
2014/04/10 职场文书
产品售后服务承诺书
2014/05/21 职场文书
公司董事长岗位职责
2014/06/08 职场文书
人事专员岗位职责说明书
2014/07/30 职场文书
西双版纳导游词
2015/02/03 职场文书
2015年化妆品销售工作总结
2015/05/11 职场文书
2015企业年终工作总结范文
2015/05/27 职场文书
2016新年感言
2015/08/03 职场文书
幼儿园亲子活动感想
2015/08/07 职场文书
《工作是最好的修行》读后感3篇
2019/12/13 职场文书
Java基础之this关键字的使用
2021/06/30 Java/Android
MySQL中一条update语句是如何执行的
2022/03/16 MySQL
详细聊聊Oracle表碎片对性能有多大的影响
2022/03/19 Oracle
关于windows server 2012 DC 环境 重启后蓝屏代码:0xc00002e2的问题
2022/05/25 Servers