Python格式化文件存储---JSON

1. 什么是JSON?

JSON即JavaScript Object Notation,是一种轻量级数据交换格式,基于JavaScript语言的一个子集,采用完全独立于编程语言的文本格式存储和表示数据。JSON格式的数据可以使用特定的JavaScript函数对其进行解析,将JSON字符串转换为JavaScript对象,方便数据的传递与存储。

1.1 JSON数据格式

JSON数据格式由两种结构组成,分别是键值对和集合(数组),其中键值对由一组属性和对应的值组成,键和值之间由冒号“:”分隔,属性与属性之间则使用逗号“,”分隔,集合则用中括号“[]”包裹,值之间同样使用逗号分隔。比如下面这段JSON数据:

{

"name": "小王",

"age": 18,

"hobby": [

"play games",

"listen to music"

]

}

它的结构可以进行如下解析:

键值对:"name"是属性,"小王"是对应的值;"age"是属性,18是对应的值;"hobby"是属性,后面是一个集合,包含了两个值:play games和listen to music。

集合:整段数据本身也是一种集合结构,用大括号“{}”包裹起来。

1.2 JSON与Python

Python提供了很多操作JSON数据格式的库,最常用的是内置的json模块。使用json模块可以将Python对象转换为JSON格式的数据,也可以将JSON格式的数据转换为Python对象,进而进行序列化、反序列化等操作。

2. 将Python对象转换为JSON数据

使用json模块可以将Python对象转换为JSON格式的数据,其中最常用的方法是dumps()和dump()函数。dumps()函数将Python对象转换为JSON格式的字符串,而dump()函数则将Python对象转换为JSON格式的数据,存储到文件中。

2.1 dumps()函数

使用dumps()函数可以将Python对象转换为JSON格式的字符串,其常用参数及用法如下:

import json

# 将Python对象转换为JSON格式的字符串

json_str = json.dumps(py_obj, indent=4, ensure_ascii=False)

其中,py_obj是Python对象,indent参数为缩进空格数,ensure_ascii参数指定是否对非ASCII字符进行编码,这里设置为False即可保留中文字符。

下面通过一个例子进行测试:

import json

# Python对象

person = {

"name": "小王",

"age": 18,

"hobby": [

"play games",

"listen to music"

]

}

# 将Python对象转换为JSON格式的字符串

json_str = json.dumps(person, indent=4, ensure_ascii=False)

# 输出JSON字符串

print(json_str)

输出结果如下:

{

"name": "小王",

"age": 18,

"hobby": [

"play games",

"listen to music"

]

}

2.2 dump()函数

使用dump()函数可以将Python对象转换为JSON格式的数据,并存储到文件中,其常用参数及用法如下:

import json

# 将Python对象转换为JSON格式的数据,并存储到文件中

with open('person.json', 'w', encoding='utf-8') as f:

json.dump(py_obj, f, indent=4, ensure_ascii=False)

其中,py_obj是Python对象,f为文件对象,indent参数为缩进空格数,ensure_ascii参数指定是否对非ASCII字符进行编码,这里设置为False即可保留中文字符。

下面通过一个例子进行测试:

import json

# Python对象

person = {

"name": "小王",

"age": 18,

"hobby": [

"play games",

"listen to music"

]

}

# 将Python对象转换为JSON格式的数据,并存储到文件中

with open('person.json', 'w', encoding='utf-8') as f:

json.dump(person, f, indent=4, ensure_ascii=False)

执行该代码后,当前目录下会生成一个名为person.json的文件,使用文本编辑器打开即可查看。

3. 将JSON数据转换为Python对象

同样使用json模块,可以将JSON格式的数据转换为Python对象,最常用的方法是loads()和load()函数。loads()函数将JSON格式的字符串转换为Python对象,而load()函数则将JSON格式的数据从文件中读取出来,并转换为Python对象。

3.1 loads()函数

使用loads()函数可以将JSON格式的字符串转换为Python对象,其常用参数及用法如下:

import json

# 将JSON格式的字符串转换为Python对象

py_obj = json.loads(json_str)

其中,json_str是JSON格式的字符串,py_obj为转换后的Python对象。

下面通过一个例子进行测试:

import json

# JSON格式的字符串

json_str = '{"name": "小王", "age": 18, "hobby": ["play games", "listen to music"]}'

# 将JSON格式的字符串转换为Python对象

person = json.loads(json_str)

# 输出Python对象

print(person)

输出结果如下:

{'name': '小王', 'age': 18, 'hobby': ['play games', 'listen to music']}

3.2 load()函数

使用load()函数可以将JSON格式的数据从文件中读取出来,并转换为Python对象,其常用参数及用法如下:

import json

# 从文件中读取JSON格式的数据,并转换为Python对象

with open('person.json', 'r', encoding='utf-8') as f:

py_obj = json.load(f)

其中,f为文件对象,py_obj为转换后的Python对象。

下面通过一个例子进行测试:

先将之前生成的person.json文件复制到当前目录下,执行如下代码:

import json

# 从文件中读取JSON格式的数据,并转换为Python对象

with open('person.json', 'r', encoding='utf-8') as f:

person = json.load(f)

# 输出Python对象

print(person)

输出结果与之前一样:

{'name': '小王', 'age': 18, 'hobby': ['play games', 'listen to music']}

4. Python对JSON数据格式的处理示例

下面通过一个简单的示例代码,演示Python对JSON数据格式的处理过程。首先定义一个字典类型的Python对象,其中包含了一个列表型的元素。接着将该Python对象转换为JSON格式的字符串,再通过dump()函数将JSON格式的数据存储到文件中。最后,通过load()函数读取文件中的JSON数据,将其转换为Python对象,并输出。

import json

# 定义Python对象

person = {

"name": "小王",

"age": 18,

"hobby": [

"play games",

"listen to music"

]

}

# 将Python对象转换为JSON格式的字符串

json_str = json.dumps(person, indent=4, ensure_ascii=False)

# 将JSON格式的数据存储到文件中

with open('person.json', 'w', encoding='utf-8') as f:

json.dump(person, f, indent=4, ensure_ascii=False)

# 从文件中读取JSON格式的数据,并转换为Python对象

with open('person.json', 'r', encoding='utf-8') as f:

py_obj = json.load(f)

# 输出Python对象

print(py_obj)

执行该代码后,输出结果如下:

{'name': '小王', 'age': 18, 'hobby': ['play games', 'listen to music']}

总结

本文介绍了Python格式化文件存储—JSON的相关内容,包括JSON数据格式的结构、Python对JSON数据格式的处理方法及示例等。通过掌握这些内容,可以方便地将Python对象转换为JSON格式的数据,或将JSON格式的数据转换为Python对象,进行序列化、反序列化等操作。

后端开发标签