本篇主要介绍一下 python 中 json的使用 如何把 dict转成json 、object 转成json 、以及json转成对象 等等。。
json是非常常用的一种数据格式,比如在前后端分离的 web开发中,返回给前端 通常都会使用json ,那么来看看 python 中如何玩转json
注意: ensure_ascii=False 否则中文乱码
import json student = { 'name': 'johnny', 'age': 27, 'address': '无锡' } print(json.dumps(student, ensure_ascii=False)) # {"name": "johnny", "age": 27, "address": "无锡"} json
import json json_student = '{"name": "johnny", "age": 27, "address": "无锡"}' print(json.loads(json_student)) # {'name': 'johnny', 'age': 27, 'address': '无锡'} 字典dict
注意:json.dumps() 不支持 直接把 类对象放进去!!! 会报错 Student is not JSON serializable
import json class Student: def __init__(self, name, age): self.name = name self.age = age student = Student('candy', '30') #错误使用!!! print(json.dumps(student)) 报错!!! TypeError: Object of type Student is not JSON serializable
#正确使用!!! print(json.dumps(student.__dict__))) #可以使用 类对象的 __dict__ 属性 #{"name": "candy", "age": "30"}
default=指定方法
class Student: def __init__(self, name, age): self.name = name self.age = age @staticmethod def conver2json(self): return { 'name': self.name, 'age': self.age } #通过自己写一个 conver2json方法 去手动转化一下 把 类对象转成json print(json.dumps(student,default=Student.conver2json))
注意:json.loads 默认只会转成dict,需要自己提供方法 把dict 转成 类对象
import json class Student: def __init__(self, name, age): self.name = name self.age = age @staticmethod def conver2json(self): return { 'name': self.name, 'age': self.age } @staticmethod def convert2object(dict): return Student(dict['name'],dict['age']) json_student = '{"name": "johnny", "age": 27, "address": "无锡"}' print(json.loads(json_student,object_hook=Student.convert2object)) #<__main__.Student
注意 dump 还是 只能接收 dict ,如果要把 对象写到json中 需要先把对象 转成 dict ,可以通过 ——dict——属性
student = { 'name': 'johnny', 'age': 27, 'address': '无锡' } with open('student.json','w') as f: json.dump(student,f,ensure_ascii=False)
with open('student.json','r') as f: print(json.load(f))
为什么:转成json 后 name 是一个数组呢? 因为 self.name = name, 后面有一个 逗号,。。。 会把这个name当成元组 ,元组转成 json 就是 数组!!!
class Student: def __init__(self, name, age): self.name = name, #这里!!!不能有 逗号。。 self.age = age student = Student('candy', '30') print(json.dumps(student.__dict__)) #猜猜它的打印是什么 #{"name": ["candy"], "age": "30"}
很简单 注意一下 class 和 json 的相互转化即可
参考:http://www.kaotop.com/it/26500.html
欢迎大家访问 个人博客 Johnny小屋
欢迎关注个人公众号