在不同编程语言之间传递对象,须把对象序列化为标准格式,比如XML
但更好的方法是序列化为JSON,因为JSON表示出来就是一个字符串,可被所有语言读取,也可方便地存储到磁盘或者通过网络传输
JSON不仅是标准格式,并且比XML更快,而且可直接在Web页面中读取,因为JSON表示的对象就是标准的JavaScript语言的对象

JSON和Python内置的数据类型对应如下:

JSON类型 Python类型
{} dict
[] list
"string" str
1234.56 int或float
true/false True/False
null None

使用示例

    序列化与反序列化之json(字符串)

  import json
  d = dict(name='Bob', age=20, score=88) #dict对象可以直接序列化为JSON的{}
  print(json.dumps(d))
#输出:{"name": "Bob", "age": 20, "score": 88}
#把对象序列化为标准的json字符串格式   json_str = '{"age": 20, "score": 88, "name": "Bob"}'
  print(json.loads(json_str))
#输出:{"name": "Bob", "age": 20, "score": 88}
#把JSON字符串反序列化出对象

  序列化与反序列化之json(文件)

   import json
  d = dict(name='Bob', age=20, score=88)
  f = open('dump.txt', 'w')
json.dump(d, f) #把对象序列化成json字符串后写入一个file-like Object
  f.close()   f1 = open('dump.txt', 'r')
  d1 = json.load(f1) #从一个file-like Object中将json字符串反序列化出对象
  f1.close()
print(d1) #输出:{'name': 'Bob', 'age': 20, 'score': 88}

  序列化与反序列化之json(自定义对象)

import json

class Student(object):
  def __init__(self, name, age, score):
    self.name = name
    self.age = age
    self.score = score def student2dict(std):
  return {
    'name': std.name,
    'age': std.age,
    'score': std.score
  } def dict2student(d):
  return Student(d['name'], d['age'], d['score']) s = Student('Bob', 20, 88) #Student对象是无法直接通过dumps方法转换json的,需要转换成dict
print(json.dumps(s, default=student2dict)) #该方式可以将任意class转换为dict
#通常class的实例都有一个__dict__属性,它就是一个dict,用来存储实例变量。也有少数例外,比如定义了__slots__的class
print(json.dumps(s, default=lambda obj: obj.__dict__)) #loads()方法首先转换出一个dict对象,然后,传入的object_hook函数负责把dict转换为Student
json_str = '{"age": 20, "score": 88, "name": "Bob"}'
print(json.loads(json_str, object_hook=dict2student))

注意:由于JSON标准规定JSON编码是UTF-8,所以我们总是能正确地在Python的str与JSON的字符串之间转换

最新文章

  1. 【C#进阶系列】15 枚举类型和位标志
  2. 转载:JavaSE之反射
  3. [转载]Emmet使用手册
  4. SQL锁表解决并发性
  5. 基于事件的异步模式——BackgroundWorker
  6. XmlDocument,XDocument相互转换
  7. interview collect
  8. 最新最全的html5标签集合
  9. 2017上海QCon之旅总结(上)
  10. Linux网络编程--wireshark分析TCP包头的格式
  11. hadoop2.6.0集群搭建
  12. golang标准库 context的使用
  13. 导出表结构到Excel 生成代码用
  14. python 字符串内置方法实例
  15. Python2.7-logging模块
  16. Codeforces 906 D. Power Tower
  17. GORM 中文文档
  18. Codeforces D - High Load
  19. Linux环境安装.NET运行环境
  20. POJ 1830 开关问题(Gauss 消元)

热门文章

  1. 天然气管道Gaz[POI2007]
  2. 处理 NCBI taxonomy tree
  3. testXSS <img src="aa" onerror="javascript:alert('XSS');"/>
  4. OO第一单元三次作业总结
  5. 【linux】工作时使用的命令
  6. C++二分图匹配基础:zoj1002 FireNet 火力网
  7. C语言内存四区的学习总结(一)---- 静态区
  8. mysql 数据库链接 过期产品
  9. cosfuture logs
  10. CentOS 5 常见的configure error的解决方法