Python Json使用
本篇主要介绍一下 python 中 json的使用 如何把 dict转成json 、object 转成json 、以及json转成对象 等等。。json是非常常用的一种数据格式,比如在前后端分离的 web开发中,返回给前端 通常都会使用json ,那么来看看 python 中如何玩转json
1.dict 转成 json (json.dumps(dict)) 注意: ensure_ascii=False 否则中文乱码
import json student = {
'name': 'johnny',
'age': 27,
'address': '无锡'
} print(json.dumps(student, ensure_ascii=False))
# {"name": "johnny", "age": 27, "address": "无锡"}json
2.json 转 dict (json.loads(jsonstr))
import jsonjson_student = '{"name": "johnny", "age": 27, "address": "无锡"}'print(json.loads(json_student))
# {'name': 'johnny', 'age': 27, 'address': '无锡'} 字典dict
3. 类对象转 json (dict属性/提供default=方法) 3.1 错误使用 注意:json.dumps() 不支持 直接把 类对象放进去!!! 会报错 Student is not JSON serializable
import jsonclass Student:
def __init__(self, name, age):
self.name = name
self.age = agestudent = Student('candy', '30')
#错误使用!!!
print(json.dumps(student))报错!!! TypeError: Object of type Student is not JSON serializable
3.2 使用类对象 dict 属性
#正确使用!!!
print(json.dumps(student.__dict__))) #可以使用 类对象的 __dict__ 属性
#{"name": "candy", "age": "30"}
3.3 提供一个 convert2json 方法 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))
4.json 转 类对象 (json.loads(jsonstr,object_hook=..)) 注意:json.loads 默认只会转成dict,
需要自己提供方法 把dict 转成 类对象
import jsonclass 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
5. dict/对象 转为 json文件 (json.dump(student,f)) 注意 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)
6. json文件转 dict /对象 (json.load)
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 = agestudent = Student('candy', '30')
print(json.dumps(student.__dict__))
#猜猜它的打印是什么 #{"name": ["candy"], "age": "30"}
总结
- json.dumps() 只支持 dict转json 如果是 class 对象 需要 通过 dict属性或者提供default= conver2json 方法
- json.dump() 是写入 文件中
- json.loads() 只支持把 json str转成 dict ,如果要转成 class 对象 则需要提供 object_hook=convert2object方法
- json.load()/ 是从文件中读取 jsonstr 到 dict
参考:http://www.kaotop.com/it/2650...
欢迎大家访问 个人博客 Johnny小屋【Python Json使用】
欢迎关注个人公众号
文章图片
推荐阅读
- Redis|基于Redis+Lua的滑动窗口式限流方案
- Leetcode每日刷题|LeetCode.565. 数组嵌套____暴力dfs->剪枝dfs->原地修改
- 搭建微服务架构的基础|Dubbo,SpringCloud,Kubernetes该如何选型()
- java|JAVA-MYSQL-SSH酒店民宿客房管理系统
- java|ssm糖尿病居家健康管理系统,java项目全套代码,小程序+后台管理,mysql数据库
- java|SSM教务管理系统
- java|Java+Swing+Mysql实现ATM自助存取款系统(2022最新版)
- java|使用环信进行即时通信IM
- 即时通讯使用|极光通讯用于java web即时通信---构建idea下maven+springboot第三方即时通讯