手机
当前位置:查字典教程网 >脚本专栏 >python >Python中解析JSON并同时进行自定义编码处理实例
Python中解析JSON并同时进行自定义编码处理实例
摘要:在对文件内容或字符串进行JSON反序列化(deserialize)时,由于原始内容编码问题,可能需要对反序列化后的内容进行编码处理(如将un...

在对文件内容或字符串进行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系列之数据处理编程实例(二)

python计数排序和基数排序算法实例

python使用新浪微博api上传图片到微博示例

Python中文编码那些事

python单链表实现代码实例

python和C语言混合编程实例

python 中文字符串的处理实现代码

python使用递归解决全排列数字示例

Python设计模式之代理模式实例

python 判断自定义对象类型

精品推荐
分类导航