Python数据持久性 JSON模块

Python数据持久性 JSON模块

JSON是 JavaScript Object Notation的缩写。 它是一种轻量级的数据交换格式。它是一种独立于语言和跨平台的文本格式,被许多编程语言支持。这种格式用于网络服务器和客户端之间的数据交换。

JSON格式与pickle类似。然而,pickle的序列化是Python特有的,而JSON格式被许多语言实现,因此已经成为普遍的标准。Python标准库中的json模块的功能和界面与pickle和marshal模块相似。

就像pickle模块一样,json模块也提供了 dumps()load() 函数,用于将Python对象序列化为JSON编码的字符串, dump()load() 函数将序列化的Python对象写入/读出文件。

  • dumps() – 这个函数将对象转换为JSON格式。

  • loads() – 该函数将JSON字符串转换回Python对象。

下面的例子演示了这些函数的基本用法

import json
   data=['Rakesh',{'marks':(50,60,70)}]
   s=json.dumps(data)
json.loads(s)

dumps()函数可以接受可选的 sort_keys 参数。默认情况下,它是False。如果设置为True,字典中的键会以排序的顺序出现在JSON字符串中。

dumps()函数有另一个可选的参数,叫做indent,它以一个数字为值。它决定json字符串格式化表示的每一段的长度,类似于打印输出。

json模块也有与上述函数相对应的面向对象的API。该模块中定义了两个类 – JSONEncoder和JSONDecoder。

JSONEncoder类

这个类的对象是Python数据结构的编码器。每个Python数据类型都被转换为相应的JSON类型,如下表所示。

Python JSON
Dict object
list, tuple array
Str string
int, float, int- & float-derived Enums number
True true
False false
None null

JSONEncoder类是由JSONncoder()构造函数实例化的。以下是编码器类中定义的重要方法

序号 方法和描述
1 encode() 将Python对象序列化为JSON格式。
2 iterencode() 对对象进行编码,并返回一个迭代器,产生对象中每个项目的编码形式。
3 indent 决定编码后的字符串的缩进程度
4 sort_keys 为true或false,以使键值按排序顺序出现或不出现。
5 Check_circular 如果为真,检查容器类型对象中的循环引用。

下面的例子是对Python列表对象的编码。

e=json.JSONEncoder()
e.encode(data)

JSONDecoder类

这个类的对象有助于将json字符串解码成Python数据结构。这个类的主要方法是decode()。下面的示例代码从前面的编码字符串中检索出Python列表对象。

d=json.JSONDecoder()
d.decode(s)

json模块定义了 load()dump() 函数,用于将JSON数据写入类似文件的对象–可能是一个磁盘文件或一个字节流,并从中读回数据。

dump()

这个函数将JSON格式的Python对象数据写到一个文件中。该文件必须以’w’模式打开。

import json
data=['Rakesh', {'marks': (50, 60, 70)}]
   fp=open('json.txt','w')
   json.dump(data,fp)
   fp.close()

这段代码将在当前目录下创建 “json.txt”。它显示的内容如下 –

["Rakesh", {"marks": [50, 60, 70]}]

load()

这个函数从文件中加载JSON数据并从中返回Python对象。该文件必须以读取权限打开(应该有’r’模式)。

例子

fp=open('json.txt','r')
   ret=json.load(fp)
   print (ret)
   fp.close()

输出

['Rakesh', {'marks': [50, 60, 70]}]

json.tool 模块也有一个命令行接口,可以验证文件中的数据,并以漂亮的格式化方式打印出JSON对象。

C:\python37>python -m json.tool json.txt
[
   "Rakesh",   
   {
      "marks": [
         50,
         60,
         70
      ]
   }
]

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程