json序列化和反序列化方法,json反序列化失败是什么意思

  json序列化和反序列化方法,json反序列化失败是什么意思

  大蟒中的字符串分普通字符串和采用双字节对字符进行编码字符串,一般从数据库中读取的字符串会自动被转换为采用双字节对字符进行编码字符串

  1.使用json.dumps时,一般的用法为:obj={name :测试} JSON。dumps(obj) { name : \ \ u6d4b \ \ u8bd 5 } print(JSON。dumps(obj)){ name : \ u6d4b \ u8bd 5 } JSON。转储(obj).encode( utf-8 ) { name : \ \ u6d4b \ \ u8bd 5 } 可以看到这里输出的字符串为普通字符串,但是里面的内容却是采用双字节对字符进行编码字符串的内容,即使对结果进行编码(“utf-8”),因为这个字符串本身就已经编码过了,所有进行编码不会有变化

  要想得到字符串的真实表示,需要用到参数确保_ascii=False(默认为True): json.dumps(obj,确保_ ascii=False) { name : \ xe6 \ xb5 \ x8b \ xe8 \ xaf \ x95 } print JSON。转储(对象,确保_ascii=False){name :测试} 2.坑:试试下面的用法(比如键是从数据库中读取的,则会以采用双字节对字符进行编码字符串形式存在):key=uname obj={key:测试} json.dumps(obj,确保_ascii=False)回溯(最近一次调用last):文件“标准输入”,第一行,在模块文件“/usr/lib 64/python 2.6/JSON/_ _ init _ _”中 py ,第237行,转储* *千瓦).编码(对象)文件"/usr/lib 64/python 2.6/JSON/encoder。py”,第368行,在编码返回""中连接(块)unicode解码错误:" ascii "编解码器无法解码位置一中的字节0xe6:序号不在范围内(128)这是因为键和价值不能以混合普通字符串和采用双字节对字符进行编码字符串的形式存在

  改成下面则正常了(同时为普通字符串或同时为采用双字节对字符进行编码字符串):key=uname obj={key:u 测试} json.dumps(obj,确保_ ascii=False)u { name : \ u6d4b \ u8bd 5 } obj={ key。编码(“utf-8”):u测试encode(utf-8)} json.dumps(obj,确保_ ascii=False) { name : \ xe6 \ xb5 \ x8b \ xe8 \ xaf \ x95 } 3 .另外说说还有一个参数默认,用于转化不可序列化对象考虑下面的场景:

  类别数据:def __init__(self):self.name= .self.detail= .data=Data() data.name=名字data.detail=细节obj={ data :data } JSON。转储(对象,确保_ascii=False)会报下面的异常:

  追溯(最近一次调用最后):文件标准输入,第一行,在模块文件/usr/lib 64/python 2.6/JSON/_ _ init _ _ 中 py ,第237行,转储* *千瓦).encode(obj)File /usr/lib 64/python 2.6/JSON/encoder。py ,第367行,in _ ITER编码=列表(self。ITER编码(o))文件/usr/lib 64/python 2.6/JSON/encoder。py ,第309行,in _iterencode for chunk in self ._iterencode_dict(o,markers):File /usr/lib 64/python 2.6/JSON/encoder。py ,第275行,in _ ITER encode _ dict for chunk in self ._iterencode(value,markers):File /usr/lib 64/python 2.6/JSON/encoder。py ,第317行,in _iterencode for chunk in self ._iterencode_default(o,markers):File /usr/lib 64/python 2.6/JSON/encoder。py ,第323行,in _ ITER encode _ default new obj=self。默认(o)文件/usr/lib 64/python 2.6/JSON/encoder。py ,第344行,在默认情况下引发类型错误(repr(o)不是JSON serializable’)类型错误:_ main main _ _ .0x11e87e8处的数据实例不是数据可序列化的这是因为json.dumps不知道如何对数据对象进行序列化,需要定义一个函数,并赋给参数默认值:

  def convert_to_builtin_type(obj):d={}.d。更新(obj .__字典_ _).返回d.json.dumps(obj,确保_ascii=False,default=convert _ to _ builtin _ type) { data :{ name : \ xe5 \ x90 \ x8d \ xe5 \ xad \ x97 , detail : \ xe7 \ xbb \ x86 \ xe8 \ x8a \ x82 } } print JSON。转储(对象,确保_ascii=False,default=convert _ to _ builtin _ type){ data :{ name :名字,详细信息: 细节}}

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • win2003r2 序列号,windowsserver2003序列号
  • win2003r2 序列号,windowsserver2003序列号,win2003 序列号大全 windows2003 sp2经测试可用的序列号(标准版与企业版)
  • ,,光碟工具 Alcohol 120% v1.9.6.4719 下载(附序列号注册码)
  • ,,xp序列号大全可通过正版验证的XP序列号
  • java中serialversionuid生成,java serialversionuid的值区别,java序列化和serialVersionUID的使用方法实例
  • ,,Python中利用LSTM模型进行时间序列预测分析的实现
  • 时间序列adf检验怎么判断平稳性,
  • python时间序列模型,python时间序列预测代码
  • 用python实现ARIMA时间序列预测实例,python时间序列预测的方法
  • python时间序列分析模块,用python实现ARIMA时间序列预测实例
  • 时间序列模型用于哪种预测,时间序列预测模型实验报告
  • 时间序列分析难不难,时间序列分析问题
  • python最简单的时间序列预测,python 时间序列模型
  • 基于lstm的时间序列预测,基于cnn的时间序列预测模型
  • Eviews时间序列模型,时间序列回归模型步骤
  • 留言与评论(共有 条评论)
       
    验证码: