Python-JSON


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

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

  • dumps() - 此函数将对象转换为 JSON 格式。

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

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

实施例1

import json

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

data = json.loads(s)
print (data, type(data))

它将产生以下输出-

["Rakesh", {"marks": [50, 60, 70]}] <class 'str'>
['Rakesh', {'marks': [50, 60, 70]}] <class 'list'>

dumps() 函数可以采用可选的 sort_keys 参数。默认情况下为 False。如果设置为 True,字典键将按排序顺序显示在 JSON 字符串中。

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

实施例2

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

import json
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 类型,如下表所示 -

Python JSON
词典 目的
列表、元组 大批
斯特 细绳
int、float、int 和 float 派生的枚举 数字
真的 真的
错误的 错误的
没有任何 无效的

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

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

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

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

  • sort_keys - 为 true 或 false 以使键按排序顺序显示或不按排序顺序显示。

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

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

例子

import json

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

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

import json
data=['Rakesh',{'marks':(50,60,70)}]
e=json.JSONEncoder()
for obj in e.iterencode(data):
   print (obj)

它将产生以下输出 -

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

JSONDEcoder 类

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

例子

import json
data=['Rakesh',{'marks':(50,60,70)}]
e=json.JSONEncoder()
s = e.encode(data)
d=json.JSONDecoder()
obj = d.decode(s)
print (obj, type(obj))

它将产生以下输出-

['Rakesh', {'marks': [50, 60, 70]}] <class 'list'>

JSON 与文件/流

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

dump() 函数

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

例子

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

例子

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