当前位置: 首页 > 后端技术 > Java

PythonJson使用

时间:2023-04-02 10:03:21 Java

PythonJson使用本文主要介绍了json在python中的使用,如何将dict转json,object转json,json转对象等。JSON是一种非常常用的数据格式。比如在前后端分离的web开发中,返回前端一般使用json。下面看看如何在python中将json1.dict转成json(json.dumps(dict))注意:ensure_ascii=False否则中文乱码importjsonstudent={'name':'johnny','age':27,'address':'Wuxi'}print(json.dumps(student,ensure_ascii=False))#{"name":"johnny","age":27,"address":"Wuxi"}json2.jsontodict(json.loads(jsonstr))importjsonjson_student='{"name":"johnny","age":27,"address":"Wuxi"}'print(json.loads(json_student))#{'name':'johnny','age':27,'address':'Wuxi'}dictionarydict3.Classobjecttojson(dictattribute/providedefault=method)3.1误操作注意:json.dumps()不支持直接把class对象放进去!!!会报错StudentisnotJSONserializableimportjsonclassStudent:def__init__(self,name,age):self.name=nameself.age=agestudent=Student('candy','30')#错误的用法!!!print(json.dumps(student))报错!!!类型错误:学生类型的对象不是JSONserializable3.2使用类对象dict属性#正确使用!!!print(json.dumps(student.__dict__)))#可以使用类对象的__dict__属性#{"name":"candy","age":"30"}3.3提供一个convert2json方法default=specifiedmethod学生类:def__init__(self,name,age):self.name=nameself.age=age@staticmethoddefconver2json(self):return{'name':self.name,'age':self.age}#通过自己写一个conver2json方法,手动将class对象转成jsonprint(json.dumps(student,default=Student.conver2json))4.jsontoclassobject(json.loads(jsonstr,object_hook=..))注:json.loads默认只会转成dict,需要自己提供将dict转成class对象的方法importjsonclassStudent:def__init__(self,name,age):self.name=nameself.age=age@staticmethoddefconver2json(self):return{'name':self.name,'age':self.age}@staticmethoddefconver2object(dict):返回Student(dict['name'],dict['age'])json_student='{"name":"johnny","age":27,"address":"Wuxi"}'print(json.loads(json_student,object_hook=Student.convert2object))#<__main__.Student5.dict/将object转为json文件(json.dump(student,f))注意dump只能接收dict。如果想把对象写成json,需要先把对象转成dict,可以通过--dict--attributestudent={'name':'johnny','age':27,'address':'Wuxi'}withopen('student.json','w')asf:json.dump(student,f,ensure_ascii=False)6.将json文件转换为dict/object(json.load)withopen('student.json','r')asf:print(json.load(f))小问题why:name转json后是数组呢?因为self.name=name,后面跟着一个逗号,。.它会把这个名字当作一个元组,元组转成json就是一个数组!!!班级学生:def__init__(self,name,age):self.name=name,#here!!!不能有逗号。.self.age=agestudent=Student('candy','30')print(json.dumps(student.__dict__))#猜猜它打印了什么#{"name":["candy"],"age":"30"}总结json.dumps()只支持将dict转json如果是类对象,需要传递dict属性或者提供default=conver2json方法json.dump()写入文件json.loads()只支持jsonstr转为dict,如果要转为class对象,需要提供object_hook=convert2object方法json.load()/就是从文件中读取jsonstr到dict,非常简单。注意class和json的相互转换可以参考:http://www.kaotop.com/it/2650...欢迎访问我的个人博客JohnnyHut欢迎关注公众号