Python JSON操作

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对象。

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

示例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
字典 对象
列表,元组 数组
字符串 字符串
整数,浮点数,整数和浮点数衍生的枚举 数字

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
]
}
]

JSON解码器类

这个类的对象帮助将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)

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程