python--积累--class转json,复杂格式转json
简单对象或者字典转json
import json
d = {'a': 'aaa', 'b': ['b1', 'b2', 'b3'], 'c': 100}
json_str = json.dumps(d)
print json_str
lambda 方式实现class转换json
import json
class Customer:
def __init__(self, name, grade, age, home, office):
self.name = name
self.grade = grade
self.age = age
self.address = Address(home, office)
def __repr__(self):
return repr((self.name, self.grade, self.age,self.address.home, self.address.office))
customers = [
Customer('john', 'A', 15, '111', 'aaa'),
Customer('jane', 'B', 12, '222', 'bbb'),
Customer('dave', 'B', 10, '333', 'ccc'),
]
json_str = json.dumps(customers, default=lambda o: o.__dict__, sort_keys=True, indent=4)
print json_str
成功运行输出如下:
[
{
"address": {
"home": "111",
"office": "aaa"
},
"age": 15,
"grade": "A",
"name": "john"
},
{
"address": {
"home": "222",
"office": "bbb"
},
"age": 12,
"grade": "B",
"name": "jane"
},
{
"address": {
"home": "333",
"office": "ccc"
},
"age": 10,
"grade": "B",
"name": "dave"
}
]
可能遇到的问题–中文乱码
解决方法 —增加ensure_ascii=False属性
json.dumps 进行序列化时,默认使用ascii编码, print json.dumps(dic)输出unicode编码的结果: {“a”: “\u4e2d\u56fd”}
json.dumps(dic,ensure_ascii=False),不使用ascii编码,输出结果为:{“a”: “中国”}
但是有时也碰到 json.dumps(m,ensure_ascii=False)之后依旧是乱码的格式,可采取下面方式处理:
#coding=utf-8
import json
dic = {"a":"中国"}
print json.dumps(dic,ensure_ascii=False).decode("utf-8").encode("gb2312") #{"a":"中国"}
遍历方式实现class转换json
# -*- encoding: UTF-8 -*-
class Student:
name = ''
age = 0
def __init__(self, name, age):
self.name = name
self.age = age
def convert_to_dict(obj):
'''把Object对象转换成Dict对象'''
dict = {}
dict.update(obj.__dict__)
return dict
def convert_to_dicts(objs):
'''把对象列表转换为字典列表'''
obj_arr = []
for o in objs:
#把Object对象转换成Dict对象
dict = {}
dict.update(o.__dict__)
obj_arr.append(dict)
return obj_arr
def class_to_dict(obj):
'''把对象(支持单个对象、list、set)转换成字典'''
is_list = obj.__class__ == [].__class__
is_set = obj.__class__ == set().__class__
if is_list or is_set:
obj_arr = []
for o in obj:
#把Object对象转换成Dict对象
dict = {}
dict.update(o.__dict__)
obj_arr.append(dict)
return obj_arr
else:
dict = {}
dict.update(obj.__dict__)
return dict
stu = Student('zhangsan', 20)
print '-----------'
print convert_to_dict(stu)
print '-----------'
print convert_to_dicts([stu, stu])
print '-----------'
print class_to_dict(stu)
print '-----------'
print class_to_dict([stu, stu])
stua = Student('zhangsan', 20)
stub = Student('lisi', 10)
stu_set = set()
stu_set.add(stua)
stu_set.add(stub)
print class_to_dict(stu_set)
成功输出如下:
-----------
{'age': 20, 'name': 'zhangsan'}
-----------
[{'age': 20, 'name': 'zhangsan'}, {'age': 20, 'name': 'zhangsan'}]
-----------
{'age': 20, 'name': 'zhangsan'}
-----------
[{'age': 20, 'name': 'zhangsan'}, {'age': 20, 'name': 'zhangsan'}]
[{'age': 10, 'name': 'lisi'}, {'age': 20, 'name': 'zhangsan'}]
参考链接:
https://www.jb51.net/article/80791.htm
https://www.cnblogs.com/qiumingcheng/p/11589657.html
还没有评论,来说两句吧...