当前位置:脚本大全 > > 正文

python class转json(Python对象转换为json的方法步骤)

时间:2021-10-15 00:44:10类别:脚本大全

python class转json

Python对象转换为json的方法步骤

Python中内置了json库,用起来超级方便,json现在以成为开发的必备。

python对象到json字符串的转换规则:

Python JSON
dict object
list, tuple array
str, unicode string
int, long, float number
True true
False false
None null

json字符串到python对象的转换规则:

JSON Python
object dict
array list
string unicode
number (int) int, long
number (real) float
true True  
false False
null None

json的api有下面4个:

注意:dict也可以是类对象

dict转换为json

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • import json
  •  
  • person = {
  •   'name': 'jack',
  •   'age': 15,
  •   'email': 'jack@litets.com'
  • }
  •  
  •  
  • print('dict:', person)
  •  
  • person_json = json.dumps(person) # 转换为json
  •  
  • print('json:', person_json)
  • 输出:

    dict: {'name': 'jack', 'age': 15, 'email': 'jack@litets.com'}
    json: {"name": "jack", "age": 15, "email": "jack@litets.com"}

    json转换为dict

  • ?
  • 1
  • 2
  • 3
  • 4
  • import json
  • person_dict = json.loads('{"name": "jack", "age": 15, "email": "jack@litets.com"}')
  •  
  • print('person dict:', person_dict)
  • 输出:

    person dict: {'name': 'jack', 'age': 15, 'email': 'jack@litets.com'}

    类对象转换为json

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • import json
  •  
  • class Person:
  •  
  •   def __init__(self, name, age, email):
  •     self.name = name
  •     self.age = age
  •     self.email = email
  •  
  •  
  • person = Person('tom', 38, 'tom@litets.com')
  •  
  • person_json = json.dumps(person.__dict__)
  •  
  • print('person json:', person_json)
  • 输出:

    person json: {"name": "tom", "age": 38, "email": "tom@litets.com"}

    json.dumps() 不能直接传递一个对象实例否则回报 TypeError: Object of type Person is not JSON serializable 错误 为了避免这个错误,我们需要修改:

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • import json
  • class Person:
  •  
  •   def __init__(self, name, age, email):
  •     self.name = name
  •     self.age = age
  •     self.email = email
  •  
  • # 将person转换为dict
  • def convert2json(person):
  •   return {
  •     'name': person.name,
  •     'age': person.age,
  •     'email': person.email
  •   }
  •  
  • person = Person('tom', 38, 'tom@litets.com')
  •  
  • # 第二个参数传递转换函数,或者使用default=lambda o: o.__dict__
  • person_json = json.dumps(person, default=convert2json)
  •  
  • print('person json:', person_json)
  • json转换为类对象

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • import json
  •  
  • class Person:
  •  
  •   def __init__(self, name, age, email):
  •     self.name = name
  •     self.age = age
  •     self.email = email
  •  
  •  
  • def convert2json(dict_json):
  •   return Person(dict_json['name'], dict_json['age'], dict_json['email'])
  •  
  •  
  • person = json.loads('{"name": "tom", "age": 38, "email": "tom@litets.com"}', object_hook=convert2json)
  •  
  • print('person:', person)
  • 输出:

    person: <__main__.Person object at 0x10a7230b8>

    loads函数只能将json转换为字典,需要我们自己转换为对象。

    dict/对象转换为json文件

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • import
  • person = {"name": "tom", "age": 38, "email": "tom@litets.com"}
  •  
  • with open('person.json', 'w') as f:
  •   json.dump(person, f)
  • 当前目录下会多一个person.json文件,内容是:

    {"name": "tom", "age": 38, "email": "tom@litets.com"}

    将json文件转换为dict/对象

  • ?
  • 1
  • 2
  • 3
  • import json
  • with open('person.json', 'r') as f:
  •   print(json.load(f))
  • 输出:

    {'name': 'tom', 'age': 38, 'email': 'tom@litets.com'}

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持开心学习网。

    原文链接:http://litets.com/article/2019/4/24/374.html

    标签:
    上一篇下一篇

    猜您喜欢

    热门推荐