python 方法 json数据 python中的json_python 字符串转json


python 常用的序列化库是:pickle,json。但是二者有一定的区别

  • JSON 是一个文本序列化格式(它输出 unicode 文本,尽管在大多数时候它会接着以 utf-8 编码),而 pickle 是一个二进制序列化格式;
  • JSON 是我们可以直观阅读的,而 pickle 不是;
  • JSON是可互操作的,在Python系统之外广泛使用,而pickle则是Python专用的;
  • 默认情况下,JSON 只能表示 Python 内置类型的子集,不能表示自定义的类;但 pickle 可以表示大量的 Python 数据类型(可以合理使用 Python 的对象内省功能自动地表示大多数类型,复杂情况可以通过实现 specific object APIs 来解决)
  • 不像pickle,对一个不信任的JSON进行反序列化的操作本身不会造成任意代码执行漏洞。

所以,json可以在不同语言之间交换数据,用于字符串和python数据类型间进行转换。

pickle:只用于python特有的类型和python的数据类型间进行转换。

其实他们主要四个功能:dumpsdumploadsload

对于 json

json.dumps(): 对json进行编码,把数据类型转换成字符串。

json.dump():对json进行编码, 把数据类型转换成字符串,并存储在文件中。

json.loads(): 对json进行解码,把字符串转换成数据类型 。

json.load(): 把文件打开,对json进行解码,从字符串转换成数据类型。

保存:

比如我们想保存


A = {
    "A":[1, 2, 3],
    "B":[3, 4, 5]
}


方法一:


with open("how_to_dump.json","w", encoding="utf8") as f:
    json.dump(A, f)


方法二:


with open("how_to_dumps.json","w", encoding="utf8") as f:
    tmp = json.dumps(A) # 将数据直接序列化
    f.write(tmp)


读取:

方法一:


with open("how_to_dump.json","r", encoding="utf8") as f:
    new_A = json.load(f)


方法二:


with open("how_to_dump.json","r", encoding="utf8") as f:
    new_A = json.loads(f.read())


对于pickle也是同样的,但是我们要注意这几点:

  1. json是可以在不同语言之间交换数据的,pickle只在python之间使用。
  2. json只能序列化最基本的数据类型,比如列表,字典,字符串,数字;pickle可以序列化所有的数据类型,包括类,函数等