Python 中的 JSON 编码器和解码器包


JSON 代表 JavaScript 对象表示法。它是一种轻量级的数据交换格式。它类似于 pickle。但是,pickle 序列化是特定于 Python 的,而 JSON 格式由多种语言实现。Python 标准库中的 json 模块实现了类似于 pickle 和 marshal 模块的对象序列化功能。

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

dumps()

此函数将对象转换为 JSON 格式。

loads()

此函数将 JSON 字符串转换回 Python 对象。

以下示例演示了这些函数的基本用法。

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

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

>>> data={"marks":50, "age":20, "rank":5}
>>> s=json.dumps(data, sort_keys=True)
>>> s
'{"age": 20, "marks": 50, "rank": 5}'
>>> json.loads(s)
{'age': 20, 'marks': 50, 'rank': 5}

dumps() 函数还有一个可选参数称为 indent,它接受一个数字作为值。它决定了 json 字符串格式化表示的每个段的长度,类似于 pprint 输出。

>>> data = ['Rakesh',{'marks':(50,60,70)}]
>>> s = json.dumps(data, indent=2)
>>> print (s)
[
   "Rakesh",{
      "marks": [
         50,
         60,
         70
      ]
   }
]

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

JSONEncoder 类

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

PythonJSON
dictobject
list, tuplearray
strstring
int, float, int- & float-derived Enumsnumber
TrueTrue
Truefalse
Nonenull

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

  • **encode()** - 将 Python 对象序列化为 JSON 格式

  • **iterencode()** - 编码对象并返回一个迭代器,该迭代器生成对象中每个项目的编码形式。

  • **indent** - 确定编码字符串的缩进级别

  • **sort_keys** - 为 true 或 false,使键按排序顺序出现或不出现。

  • **check_circular** - 如果为 True,则检查容器类型对象中的循环引用

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

>>> e=json.JSONEncoder()
>>> e.encode(data)
'["Rakesh", {"marks": [50, 60, 70]}]'

使用 iterencode() 方法,编码字符串的每个部分如下所示

>>> for obj in e.iterencode(data):
print (obj)
[
   "Rakesh"
   {
      "marks"
      :
      [
         50
         , 60
         , 70
      ]
   }
]

JSONDEcoder 类

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

>>> d=json.JSONDecoder()
>>> d.decode(s)
['Rakesh', {'marks': [50, 60, 70]}]

JSON 与文件/流

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

dump()

此函数以 JSON 格式编码 Python 对象数据并将其写入文件。该文件必须具有写入权限。

>>> 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 对象。该文件必须以读取权限打开。

>>> fp=open('json.txt','r')
>>> ret=json.load(fp)
>>> ret
['Rakesh', {'marks': [50, 60, 70]}]
>>> fp.close()

本文介绍了 json 模块中的重要函数。

更新于: 2020 年 6 月 26 日

3K+ 次查看

开启您的 职业生涯

通过完成课程获得认证

开始
广告

© . All rights reserved.