📜  Python数据持久性-JSON模块

📅  最后修改于: 2020-11-07 08:25:18             🧑  作者: Mango


JSON代表JavaScript Object Notation 。它是一种轻量级的数据交换格式。它是一种独立于语言的跨平台文本格式,许多编程语言都支持该格式。此格式用于Web服务器和客户端之间的数据交换。

JSON格式类似于pickle。但是,pickle序列化是特定于Python的,而JSON格式由许多语言实现,因此已成为通用标准。 Python标准库中json模块的功能和接口类似于pickle和marshal模块。

就像在pickle模块中一样,json模块还提供了dumps()loads()函数,用于将Python对象序列化为JSON编码的字符串,并且dump()load()函数将序列化的Python对象写入文件或从文件中读取序列化的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类由JSONEncoder()构造函数实例化。编码器类别中定义了以下重要方法-

Sr.No. Methods & Description
1

encode()

serializes Python object into JSON format

2

iterencode()

Encodes the object and returns an iterator yielding encoded form of each item in the object.

3

indent

Determines indent level of encoded string

4

sort_keys

is either true or false to make keys appear in sorted order or not.

5

Check_circular

if True, check for circular reference in container type object

以下示例对Python列表对象进行编码。

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

JSONDecoder类

此类的对象有助于将json字符串中的内容解码回Python数据结构。该类中的主要方法是decode()。以下示例代码在较早的步骤中从编码的字符串中检索Python列表对象。

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

json模块定义了load()dump()函数,以将JSON数据写入对象之类的文件-可以是磁盘文件或字节流,然后从中读取数据。

倾倒()

此函数将JSONed 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]}]

加载()

此函数从文件加载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
      ]
   }
]