
Python中解析JSON并同时进行自定义编码处理实例

在对文件内容或字符串进行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解析JSON数据的基本方法
Python的json模块提供了一种很简单的方式来编码和解码JSON数据. 其中两个主要的函数是 json.dumps() 和 json.loads() , 要比其他序列化函数库如pickle的接口少得多. 下面演示如何将一个Python数据结构转换为JSON: import json data = { 'name' : 'ACME', 'shares' : 100, 'price' : 542.23 } json_str = json.dumps(data) 下面演示如何将一个JSON编码的字
-
python中解析json格式文件的方法示例
前言 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等).这些特性使JSON成为理想的数据交换语言.易于人阅读和编写,同时也易于机器解析和生成. 本文主要介
-
深入解析Python编程中JSON模块的使用
JSON编码支持的基本数据类型为 None , bool , int , float 和 str , 以及包含这些类型数据的lists,tuples和dictionaries. 对于dictionaries,keys需要是字符串类型(字典中任何非字符串类型的key在编码时会先转换为字符串). 为了遵循JSON规范,你应该只编码Python的lists和dictionaries. 而且,在web应用程序中,顶层对象被编码为一个字典是一个标准做法. JSON编码的格式对于Python语法而已几乎是完
-
详解Python使用simplejson模块解析JSON的方法
1,Json模块介绍 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集.JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)
-
Python使用内置json模块解析json格式数据的方法
本文实例讲述了Python使用内置json模块解析json格式数据的方法.分享给大家供大家参考,具体如下: Python中解析json字符串非常简单,直接用内置的json模块就可以,不需要安装额外的模块. 一.json字符串转为python值 json字符串: 复制代码 代码如下: {"userAccount":"54321","date":"2016-12-06 10:26:17","ClickTime"
-
Python解析json文件相关知识学习
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等).这些特性使JSON成为理想的数据交换语言.易于人阅读和编写,同时也易于机器解析和生成. 今天用pytho
-
深入理解Python对Json的解析
Json简介 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等).这些特性使JSON成为理想的数据交换语言.易于人阅读和编写,同时也易于机器解析和生成. 它
-
python解析json实例方法
最近在做天气业务的延时监控,就是每隔一个小时检查一次天气数据是否变化,三次不变化就报警.由于页面给的数据的以json格式的,所以如何解析页面上的数据,从而获得我们想要的字段是我们首先考虑的问题.一般来说,当我们从一个网页上拿下来数据,就是一个字符串,比如: 复制代码 代码如下: url_data = urllib2.urlopen(url).readline() 当我们这样得到页面数据,url_data是全部页面显示一个json字符串,那么我们如何将这个字符串转变为字典格式:time = jso
-
Python学习笔记之解析json的方法分析
本文实例讲述了Python解析json的方法.分享给大家供大家参考,具体如下: 刚学习到Python中解析json的方法,觉得有必要在这里坐下笔记. 我是在python的内部环境中看的 Encoding basic Python object hierarchies >>> import json >>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}]) '["foo", {"bar&q
-
Python解析json之ValueError: Expecting property name enclosed in double quotes: line 1 column 2(char 1)
前言 在Python中提供了json包来方便快捷的解析json字串的转换过程,但是碰到了一个比较奇怪的问题,就是不太正确的json串如何来解析? 1. 问题的提出 今天在处理一个http请求的响应json之时,基于python进行解析,碰到了如下错误: Traceback (most recent call last): File "<ipython-input-16-bff463ed9408>", line 1, in <module> json.loads(
随机推荐
- jQuery插件扩展extend的简单实现原理
- vbs与bat混编修改虚拟盘符的卷标
- 使用 Java8 实现观察者模式的方法(下)
- python多线程http下载实现示例
- Python利用前序和中序遍历结果重建二叉树的方法
- android教程之textview解析带图片的html示例
- 基于Xshell使用密钥方式连接远程主机
- jQuery Ajax 实例代码 ($.ajax、$.post、$.get)
- jQuery获取cookie值及删除cookie用法实例
- js仿微博动态栏功能
- 服务器性能变慢 c盘temp文件夹存在大量sess开头文件的问题原因及解决
- java反射遍历实体类属性和类型,并赋值和获取值的简单方法
- 深入源码解析Python中的对象与类型
- php5.4以下版本json不支持不转义内容中文的解决方法
- 浅谈function(函数)中的动态参数
- c++读取sqlserver示例分享
- Python编程使用tkinter模块实现计算器软件完整代码示例
- 如何进行微信公众号开发的本地调试的方法
- Vue CLI项目 axios模块前后端交互的使用(类似ajax提交)
- Docker部署Laravel应用实现队列&任务调度
其他
- 关联查询使用like和使用in
- sqlserver 新增列和描述语法
- SciPy 增广拉格朗日乘子
- Element Select 获取其它参数
- elementui本地引入
- cv2读取视频base64
- nginx丢失带_问题
- mockito与springboot结合
- Java统计字符串中所以字符的重复次数
- jvm奔溃 一次性查询结果过多
- vue中选择器数据如何获取
- vue做编辑功能数据修改位置错误
- JDk编译java程序
- spring生成器的代码目录结构是什么
- JAVA 多个窗体的切换
- nginx 读取catlina.out日志
- JQuery 用Ajax 获取Json数据并显示
- mock模拟springbean
- 把mysql加到系统便利
- pl sql developer odbc dsn空