python--积累--class转json,复杂格式转json

傷城~ 2023-02-13 14:39 23阅读 0赞

简单对象或者字典转json

  1. import json
  2. d = {'a': 'aaa', 'b': ['b1', 'b2', 'b3'], 'c': 100}
  3. json_str = json.dumps(d)
  4. print json_str

lambda 方式实现class转换json

  1. import json
  2. class Customer:
  3. def __init__(self, name, grade, age, home, office):
  4. self.name = name
  5. self.grade = grade
  6. self.age = age
  7. self.address = Address(home, office)
  8. def __repr__(self):
  9. return repr((self.name, self.grade, self.age,self.address.home, self.address.office))
  10. customers = [
  11. Customer('john', 'A', 15, '111', 'aaa'),
  12. Customer('jane', 'B', 12, '222', 'bbb'),
  13. Customer('dave', 'B', 10, '333', 'ccc'),
  14. ]
  15. json_str = json.dumps(customers, default=lambda o: o.__dict__, sort_keys=True, indent=4)
  16. print json_str

成功运行输出如下:

  1. [
  2. {
  3. "address": {
  4. "home": "111",
  5. "office": "aaa"
  6. },
  7. "age": 15,
  8. "grade": "A",
  9. "name": "john"
  10. },
  11. {
  12. "address": {
  13. "home": "222",
  14. "office": "bbb"
  15. },
  16. "age": 12,
  17. "grade": "B",
  18. "name": "jane"
  19. },
  20. {
  21. "address": {
  22. "home": "333",
  23. "office": "ccc"
  24. },
  25. "age": 10,
  26. "grade": "B",
  27. "name": "dave"
  28. }
  29. ]

可能遇到的问题–中文乱码

解决方法 —增加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)之后依旧是乱码的格式,可采取下面方式处理:

  1. #coding=utf-8
  2. import json
  3. dic = {"a":"中国"}
  4. print json.dumps(dic,ensure_ascii=False).decode("utf-8").encode("gb2312") #{"a":"中国"}

遍历方式实现class转换json

  1. # -*- encoding: UTF-8 -*-
  2. class Student:
  3. name = ''
  4. age = 0
  5. def __init__(self, name, age):
  6. self.name = name
  7. self.age = age
  8. def convert_to_dict(obj):
  9. '''把Object对象转换成Dict对象'''
  10. dict = {}
  11. dict.update(obj.__dict__)
  12. return dict
  13. def convert_to_dicts(objs):
  14. '''把对象列表转换为字典列表'''
  15. obj_arr = []
  16. for o in objs:
  17. #把Object对象转换成Dict对象
  18. dict = {}
  19. dict.update(o.__dict__)
  20. obj_arr.append(dict)
  21. return obj_arr
  22. def class_to_dict(obj):
  23. '''把对象(支持单个对象、list、set)转换成字典'''
  24. is_list = obj.__class__ == [].__class__
  25. is_set = obj.__class__ == set().__class__
  26. if is_list or is_set:
  27. obj_arr = []
  28. for o in obj:
  29. #把Object对象转换成Dict对象
  30. dict = {}
  31. dict.update(o.__dict__)
  32. obj_arr.append(dict)
  33. return obj_arr
  34. else:
  35. dict = {}
  36. dict.update(obj.__dict__)
  37. return dict
  38. stu = Student('zhangsan', 20)
  39. print '-----------'
  40. print convert_to_dict(stu)
  41. print '-----------'
  42. print convert_to_dicts([stu, stu])
  43. print '-----------'
  44. print class_to_dict(stu)
  45. print '-----------'
  46. print class_to_dict([stu, stu])
  47. stua = Student('zhangsan', 20)
  48. stub = Student('lisi', 10)
  49. stu_set = set()
  50. stu_set.add(stua)
  51. stu_set.add(stub)
  52. print class_to_dict(stu_set)

成功输出如下:

  1. -----------
  2. {'age': 20, 'name': 'zhangsan'}
  3. -----------
  4. [{'age': 20, 'name': 'zhangsan'}, {'age': 20, 'name': 'zhangsan'}]
  5. -----------
  6. {'age': 20, 'name': 'zhangsan'}
  7. -----------
  8. [{'age': 20, 'name': 'zhangsan'}, {'age': 20, 'name': 'zhangsan'}]
  9. [{'age': 10, 'name': 'lisi'}, {'age': 20, 'name': 'zhangsan'}]

参考链接:
https://www.jb51.net/article/80791.htm
https://www.cnblogs.com/qiumingcheng/p/11589657.html

发表评论

表情:
评论列表 (有 0 条评论,23人围观)

还没有评论,来说两句吧...

相关阅读

    相关 XML格式JSON格式

    > 前言: > > XML和JSON是两种常见的数据交换格式,它们在现代软件开发中扮演着重要的角色。本文将介绍这两种格式的基本概念、特点以及它们的使用场景,以帮助更好地理解和

    相关 java XMLJSON格式

    需求: 服务器传回来XML数据,需要对XML数据进行解析,生成JSON文件 建立自己的资源库的重要性 所需要的jar包下载地址:http://download.