关于python中json与对象相互转化出现问题

写前端时经常会遇到将一个对象转为json返回。

json库

import json

  1. loads():将json数据转化成dict数据
  2. dumps():将dict数据转化成json数据
  3. load():读取json文件数据,转成dict数据
  4. 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)

参考链接: link1.
link2.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值