写前端时经常会遇到将一个对象转为json返回。
json库
import json
- loads():将json数据转化成dict数据
- dumps():将dict数据转化成json数据
- load():读取json文件数据,转成dict数据
- dump():将dict数据转化成json数据后写入json文件
转化对象
dict是用来存储对象属性的一个字典,其键为属性名,值为属性的值。dict可直接json化。或者对嵌套对象或对象进行json化。
1.对象转json:
class Pet():
def init(self, pet_type, pet_name):
self.pet_type = pet_type
self.pet_name = pet_name
import json
def pet2json():
pet = Pet(‘Cat’, ‘Lili’)
js = json.dumps(pet.dict)
print(js)
2.嵌套对象转json:
def simple_person():
pet = Pet(‘Cat’, ‘Lili’)
p = People(‘Xiaoming’, 12,pet.dict)
json_data = json.dumps(p.dict)
print(json_data)
3.对字典转json
import json
def dict_to_json():
dict = {}
dict[‘name’] = ‘many’
dict[‘age’] = 10
dict[‘sex’] = ‘male’
print(dict) # 输出:{‘name’: ‘many’, ‘age’: 10, ‘sex’: ‘male’}
j = json.dumps(dict)
print(j) # 输出:{“name”: “many”, “age”: 10, “sex”: “male”}
4.json数据转成dict字典
import json
def json_to_dict():
j = ‘{“id”: “007”, “name”: “007”, “age”: 28, “sex”: “male”, “phone”: “13000000000”, “email”: “123@qq.com”}’
dict = json.loads(s=j)
print(dict) # {‘id’: ‘007’, ‘name’: ‘007’, ‘age’: 28, ‘sex’: ‘male’, ‘phone’: ‘13000000000’, ‘email’: ‘123@qq.com’}
5.json数据转成对象
import json
def json_to_obj():
j = ‘{“id”: “007”, “name”: “007”, “age”: 28, “sex”: “male”, “phone”: “13000000000”, “email”: “123@qq.com”}’
dict = json.loads(s=j)
stu = Student()
stu.dict = dict
print('id: ’ + stu.id + ’ name: ’ + stu.name + ’ age: ’ + str(stu.age) + ’ sex: ’ + str(
stu.sex) + ’ phone: ’ + stu.phone + ’ email: ’ + stu.email) # id: 007 name: 007 age: 28 sex: male phone: 13000000000 email: 123@qq.com
出现问题
Object of type ‘ndarray’ is not JSON serializable
出现此问题代码为:
x = np.arange(0, 30, 0.1)
data = x.reshape((5, 20, 3))
js = json.dumps(data)
总结:json不认numpy的array,需要对numpy array进行转化为list
python中list与numpy array 的转换(修改代码)
#array转换为list
m = data.tolist()
need = {
‘lon’: [longitude_max, longitude_min],
‘lat’: [latitude_max, latitude_min],
‘data’: m
}
# list转化为json
js = json.dumps(need)