Python3-json & pickle 序列化

JSON(JavaScript Object Notation, JS对象标记)是一中轻量级的数据交换格式,大部分语言都支持

Python3中的json提供了对json格式数据的序列化支持

  json.dump(obj, fileobj)

    将Python对象序列化成json字符串并写入到打开的文件对象中

import json

# 写入json数据
with open("demo.txt", "w") as f:
    data = {"one": 1, "Two": 2, "Three": 3, "Hello": "你好"}
    json.dump(data, f)
View Code

  json.load(fileobj)

    返回读取打开的文件对象中的所有json字符串,并转成Python对象

import json

# 读取json数据(只能一次性读取全部,不能像pickle一样分次load())
with open("demo.txt", "r") as f2:
    print(json.load(f2))
View Code

  json.dumps(obj)  

    将Python对象转换成json字符串

  json.loads(json_str)  

    将json字符串转换成Python对象

import json

data = {"one": 1, "Two": 2, "Three": 3, "Hello": "你好"}
json_str = json.dumps(data)    # json格式数据编码
print(json_str)                # 输出结果: {"one": 1, "Two": 2, "Three": 3, "Hello": "\u4f60\u597d"}

result = json.loads(json_str)    # json格式数据解码
print(result)                    # {'one': 1, 'Two': 2, 'Three': 3, 'Hello': '你好'}
View Code

Python3中的pickle提供了对几乎所有的Python对象的序列化支持

  pickle.dump(obj, fileobj)

    将Python对象序列化成pickle字节数据并写入到打开的文件对象中

  pickle.load(fileobj)

    返回读取打开的文件对象中的第n次dump()的pickle字节数据,并转成Python对象

  pickle.dumps(obj)  

    将Python对象转换成pickle字节数据

  pickle.loads(pickle_bytes)  

    将pickle字节数据转换成Python对象

import pickle


class User:
    username = "Jet"

data = {"one": 1, "Two": 2, "Three": 3, "Hello": "你好"}

# pickle数据序列化写入,几乎支持所有Python对象
with open("pickle_data.txt", "wb") as wf:
    u = User()
    pickle.dump(u, wf)
    pickle.dump(data, wf)

# pickle序列化数据读取,有几次dump()就可以load()几次
with open("pickle_data.txt", "rb") as rf:
    print(pickle.load(rf).username)    # 输出结果: Jet
    print(pickle.load(rf))             # 输出结果: {'one': 1, 'Two': 2, 'Three': 3, 'Hello': '你好'}
View Code

json模块和pickle模块的区别

  1.JSON是一中文本序列化格式(它输出unicode文本,大多数时候为UTF-8),而Pickle是一个二进制的序列化格式

  2.JSON是人类可读的,而Pickle不是

  3.JSON是可互操作的,很多编程语言都支持,而pickle是特定于Python语言交互的

  4.json模块支持的Python对象只有几个,如字典、字符串、数字等,而pickle几乎全部支持

参考资料

  http://python.usyiyi.cn/translate/python_352/library/json.html

  http://python.usyiyi.cn/translate/python_352/library/pickle.html

posted on 2017-03-27 14:48  AustralGeek  阅读(209)  评论(0编辑  收藏  举报

导航