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 相关文章推荐
wxPython 入门教程
Oct 07 Python
Python中分数的相关使用教程
Mar 30 Python
详解在Python程序中自定义异常的方法
Oct 16 Python
python高手之路python处理excel文件(方法汇总)
Jan 07 Python
独特的python循环语句
Nov 20 Python
浅谈django model postgres的json字段编码问题
Jan 05 Python
在IPython中进行Python程序执行时间的测量方法
Nov 01 Python
对python:循环定义多个变量的实例详解
Jan 20 Python
解决Jupyter notebook中.py与.ipynb文件的import问题
Apr 21 Python
Python smtp邮件发送模块用法教程
Jun 15 Python
Python求区间正整数内所有素数之和的方法实例
Oct 13 Python
使用Selenium实现微博爬虫(预登录、展开全文、翻页)
Apr 13 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 获取一个月第一天与最后一天的代码
2010/05/16 PHP
php入门学习知识点一 PHP与MYSql连接与查询
2011/07/14 PHP
解析func_num_args与func_get_args函数的使用
2013/06/24 PHP
领悟php接口中interface存在的意义
2013/06/27 PHP
phpMyAdmin自动登录和取消自动登录的配置方法
2014/05/12 PHP
php实现给图片加灰色半透明效果的方法
2014/10/20 PHP
JavaScript Prototype对象
2009/01/07 Javascript
javascript学习笔记(四)function函数部分
2014/09/30 Javascript
JavaScript中日期的相关操作方法总结
2015/10/24 Javascript
js判断手机访问或者PC的几个例子(常用于手机跳转)
2015/12/15 Javascript
预防网页挂马的方法总结
2016/11/03 Javascript
JS搜狐面试题分析
2016/12/16 Javascript
详解Vue使用 vue-cli 搭建项目
2017/04/20 Javascript
详解windows下vue-cli及webpack 构建网站(二)导入bootstrap样式
2017/06/17 Javascript
webpack教程之webpack.config.js配置文件
2017/07/05 Javascript
详谈innerHTML innerText的使用和区别
2017/08/18 Javascript
jQuery中图片展示插件highslide.js的简单dom
2018/04/22 jQuery
vue 根据数组中某一项的值进行排序的方法
2018/08/30 Javascript
ng-zorro-antd 入门初体验
2018/12/03 Javascript
Vue用mixin合并重复代码的实现
2020/11/27 Vue.js
JavaScript实现原型封装轮播图
2020/12/27 Javascript
跟老齐学Python之重回函数
2014/10/10 Python
在Debian下配置Python+Django+Nginx+uWSGI+MySQL的教程
2015/04/25 Python
Python实现随机选择元素功能
2017/09/14 Python
Python中单、双下划线的区别总结
2017/12/01 Python
Python实现的爬虫刷回复功能示例
2018/06/07 Python
浅谈python已知元素,获取元素索引(numpy,pandas)
2019/11/26 Python
python实现的分层随机抽样案例
2020/02/25 Python
使用keras实现孪生网络中的权值共享教程
2020/06/11 Python
使用Keras中的ImageDataGenerator进行批次读图方式
2020/06/17 Python
eDreams加拿大:廉价航班、酒店和度假
2019/03/29 全球购物
社团2014年植树节活动总结
2014/03/11 职场文书
党员干部反四风对照检查材料思想汇报
2014/09/14 职场文书
承租经营合作者协议书
2014/10/01 职场文书
建筑工程材料员岗位职责
2015/04/11 职场文书
Vue2项目中对百度地图的封装使用详解
2022/06/16 Vue.js