最简单的 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 json

json_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 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


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 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



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 = age


student = Student('candy', '30')
print(json.dumps(student.__dict__))
#猜猜它的打印是什么

#{"name": ["candy"], "age": "30"}  


总结

  1. json.dumps() 只支持 dict转json  如果是 class 对象 需要 通过 dict属性或者提供default= conver2json 方法

  2. json.dump() 是写入 文件中

  3. json.loads() 只支持把 json str转成 dict ,如果要转成 class 对象 则需要提供 object_hook=convert2object方法

  4. json.load()/ 是从文件中读取 jsonstr 到 dict

很简单 注意一下 class 和 json 的相互转化即可

参考:http://www.kaotop.com/it/26500.html


原文始发于微信公众号(Johnny屋):最简单的 Python Json 使用总结,还不来学学?

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/89961.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!