章节索引 :

Python 标准库之 Json 模块

JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的 javascript 规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

1. 概述

1.1 json 格式

使用 JSON 描述一个人:

{
    "name": "tom",
    "age": 12
}
  • 人有两个属性: name 和 age
    • 属性 name 的值为 “tom”
    • 属性 age 的值为 12

1.2 json 模块

Python 标准库的 json 模块提供了对 json 的支持:

  • 把字符串转换成 JSON 对象
  • 把 JSON 对象换成字符串

json 模块提供了如下常用方法:

方法 功能
json.dumps(obj) 将 JSON 对象转换成字符串
json.loads(obj) 将字符串转换成 JSON 对象
json.dump(obj,file) 将 JSON 对象转换成字符串,并写入到文件中
json.load(file) 读取文件中的字符串,转换成 JSON 对象

2. json.dumps(obj)

json.dumps(obj) 的功能是将 JSON 对象转换成字符串,示例如下:

>>> import json
>>> object = {'name':'tom', 'age':12}
>>> string = json.dumps(object)
>>> string
'{"name": "tom", "age": 12}'
  • 在第 2 行,创建变量 object,变量 object 是 JSON 对象
  • 在第 3 行,使用 dumps 将 object 转换为 string

3. json.loads(s)

json.loads(obj) 的功能是将字符串转换成 JSON 对象,示例如下:

>>> import json
>>> string = '{"name": "tom", "age": 12}'
>>> object = json.loads(string)
>>> object
{'name':'tom', 'age':12}
>>> object['name']
'tom'
>>> object['age']
12
  • 在第 2 行,创建字符串 string,它以字符串的形式描述了一个 JSON 对象
  • 在第 3 行,使用 loads 将 string 转换为 object
  • 在第 6 行,显示 object 的属性 name 的值
  • 在第 8 行,显示 object 的属性 age 的值

4. json.dump(obj,file)

json.dump(obj,file) 的功能是将 JSON 对象转换成字符串,并写入到文件中,示例如下:

import json
file = open('person.json', 'w')
object = {'name':'tom', 'age':12}
json.dump(object, file)
file.close()
  • 在第 2 行,创建文件 person.json
  • 在第 3 行,创建 JSON 对象 object
  • 在第 4 行,将 JSON 对象 object 写入到文件 file 中

运行该程序,在当前目录下生成文件 person.json,内容如下:

{"name": "tom", "age": 12}

5. json.load(file)

json.load(file) 的功能是将读取文件中的字符串,转换成 JSON 对象,示例如下:

import json
file = open('person.json')
object = json.load(file)
print(object)
print(object['name'])
print(object['age'])
file.close()
  • 在第 2 行,打开文件 person.json
  • 在第 3 行,从文件中读取字符串,转换成 JSON 对象
  • 在第 5 行,显示 object 的属性 name 的值
  • 在第 6 行,显示 object 的属性 age 的值

假设当前目录下存在文件 person.json,内容如下:

{"name": "tom", "age": 12}

运行该程序,输出结果如下:

{'name':'tom', 'age':12}
tom
12