Python中解析JSON并同时进行自定义编码处理实例
发布时间:2020-12-16 19:50:42 所属栏目:Python 来源:网络整理
导读:在对文件内容或字符串进行JSON反序列化(deserialize)时,由于原始内容编码问题,可能需要对反序列化后的内容进行编码处理(如将unicode对象转换为str)。 在Python中,一种方式是先使用json.load或json.loads反序列化得到dict对象,然后对这个dict对象进行
在对文件内容或字符串进行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 参考: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |