一、什么是Json
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成。它基于JavaScript语法,但与之无关。JSON具有良好的可读性和扩展性,已经成为广泛应用的数据交换格式,被广泛用于Web服务之间的数据通信。
二、Json转Python对象
Python内置的json模块提供了将json字符串转化为python对象的功能。其中主要有以下几个函数:
- json.loads():将json字符串解码为Python对象。
- json.load():从文件读取json,并将其解码为Python对象。
import json #json字符串 json_str = '{"name":"Tom", "age": 18, "gender": "male"}' #将json字符串转化为Python对象 python_obj = json.loads(json_str) print(python_obj) #输出结果:{'name': 'Tom', 'age': 18, 'gender': 'male'}
三、Python对象转Json
同样,Python内置的json模块也提供了将python对象转化为json字符串的功能。其中主要有以下几个函数:
- json.dumps():将Python对象编码成json字符串。
- json.dump():将Python对象编码成json字符串,并写入文件。
import json #Python对象 python_obj = { "name": "Tom", "age": 18, "gender": "male" } #将Python对象转化为json字符串 json_str = json.dumps(python_obj) print(json_str) #输出结果:{"name": "Tom", "age": 18, "gender": "male"}
四、Json转Python自定义对象
json模块只能将json字符串转化为Python内置类型的对象,但是我们也可以通过一些自定义的方式,将json字符串转化为Python自定义类型的对象。
import json #自定义类 class Person: def __init__(self, name, age, gender): self.name = name self.age = age self.gender = gender #json字符串 json_str = '{"name":"Tom", "age": 18, "gender": "male"}' #将json字符串转化为Python内置类型的对象 python_obj = json.loads(json_str) #将Python内置类型对象转化为自定义类型的对象 person = Person(**python_obj) print(person.name, person.age, person.gender) #输出结果:Tom 18 male
五、Python自定义对象转Json
同样可以通过自定义方式,将Python自定义类型的对象转化为json字符串。
import json #自定义类 class Person: def __init__(self, name, age, gender): self.name = name self.age = age self.gender = gender #将对象转换为Python内置类型的字典 def to_dict(self): return { "name": self.name, "age": self.age, "gender": self.gender } #自定义类型对象 person = Person("Tom", 18, "male") #将Python自定义类型的对象转化为Python内置类型的字典 python_dict = person.to_dict() #将Python内置类型的字典转化为json字符串 json_str = json.dumps(python_dict) print(json_str) #输出结果:{"name": "Tom", "age": 18, "gender": "male"}
六、Json的高级操作
json模块还提供了一些高级的操作,例如:
- 使用ensure_ascii=False参数输出为中文字符串。
- 使用sort_keys参数将键按字典序排列。
- 使用default关键字参数指定一个函数,将不可序列化类型的对象转化为可序列化的对象。
import json #自定义类 class Person: def __init__(self, name, age, gender): self.name = name self.age = age self.gender = gender def to_dict(self): return { "name": self.name, "age": self.age, "gender": self.gender } #自定义类型对象 person = Person("Tom", 18, "male") #使用sort_keys参数将字典按照键的字典序排列 json_str = json.dumps(person.to_dict(), sort_keys=True) print(json_str) #输出结果:{"age": 18, "gender": "male", "name": "Tom"}