Python的json标准库怎么用

1. 简介

在Python中,JSON(JavaScript Object Notation)是一种非常方便的数据格式。Python标准库中的json模块可以方便的实现JSON数据的编解码,即将Python对象转换为JSON格式的字符串,或者将JSON格式的字符串转换为Python对象。在本文中我们将学习如何使用Python的json标准库来编写JSON交互程序。

2. 使用json.dumps()实现Python对象到JSON字符串的转换

2.1 简介

在实际项目中,我们需要将Python对象转换为JSON格式的字符串,以在各个平台之间共享数据。Python内置的json库中提供了dumps()函数来实现上述功能。

2.2 语法

json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

2.3 参数解释

obj: 必填参数,要转换的Python对象。

skipkeys: 如果设置为True,则跳过不遵循JSON规范的键值对(例如:dict中key为非字符串或自定义对象)。

ensure_ascii: 如果设置为False,则禁用ASCII编码,输出原始字符。

check_circular: 如果设置True,则检查对象循环引用。

allow_nan: 如果设置True,则允许输出NaN、Infinity及-Infinity。

cls: 用于编码的自定义对象。

indent: 用于缩进json数据的字符串,可以是数字或者字符串。

separators: 控制不同数据间,不同容器间的分隔符,如(",", ": ")。

default: 如果obj中含有不能被json序列化的类型时,会对该类型数据调用default(), 该函数有一个输入,即不支持序列化的对象输出一个支持序列化的数据。

sort_keys: 是否排序keys。

kw: 任意关键字参数可以用于json.dumps()方法。

2.4 示例

下面的示例展示了如何将Python对象转换为JSON格式的字符串:

import json

person = {"name": "John", "age": 30, "city": "New York"}

person_json = json.dumps(person)

print(person_json)

# 输出结果:

# {"name": "John", "age": 30, "city": "New York"}

从上述示例中,我们可以看到如何使用json.dumps()将Python字典转换为JSON格式的字符串。此处我们将Python字典对象person转换为字符串person_json,Python对象的键为JSON对象的字段名,Python对象的值为JSON对象的字段值。

3. 使用json.loads()实现JSON字符串到Python对象的转换

3.1 简介

json.loads()函数用于将JSON格式的字符串转换为Python对象。在Python中,我们通常会通过网络发送JSON格式的数据,并使用json.loads()进行反序列化。另外,我们也可以从文件或数据库中读取JSON数据,并使用json.loads()函数进行反序列化。

3.2 示例

下面的示例展示了如何将JSON格式的字符串转换为Python对象:

import json

# JSON格式字符串

person_json = '{"name": "John", "age": 30, "city": "New York"}'

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

person = json.loads(person_json)

# 输出Python对象

print(person)

# 输出结果:

# {'name': 'John', 'age': 30, 'city': 'New York'}

从上面的示例中,我们可以看到如何使用json.loads()将JSON格式的字符串转换为Python对象。此处我们将JSON格式的字符串person_json转换为Python对象person。Python对象的键值对一一对应与JSON对象中的字段和字段值。

4. 使用dump()和load()函数来实现文件的JSON数据读写

4.1 简介

在实际应用中,我们通常需要将JSON数据写入文件或从文件中读取JSON数据。Python标准库中json模块中提供了dump()函数和load()函数来完成这些任务。dump()函数用于将Python对象写入文件中,而load()用于从文件中读取JSON数据并转换为Python对象。

4.2 示例

下面的示例展示了如何将Python对象写入文件:

import json

person = {"name": "John", "age": 30, "city": "New York"}

# 将Python对象写入文件中

with open('person.json', 'w') as f:

json.dump(person, f)

在上述示例中,我们创建了一个Python字典对象person,通过使用json.dump()将该对象写入到person.json文件中。

下面的示例展示了如何加载JSON格式的数据,并转换为Python对象:

import json

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

with open('person.json', 'r') as f:

person = json.load(f)

# 输出Python对象

print(person)

# 输出结果:

# {'name': 'John', 'age': 30, 'city': 'New York'}

在上述示例中,我们将person.json文件中的数据读取,并转换为Python对象。

5. 使用json.JSONEncoder类自定义JSON格式的输出

5.1 简介

Python提供了json.JSONEncoder类,可以用来自定义JSON格式的输出。当需要将自定义对象转换为JSON字符串时,我们可以通过继承JSONEncoder类并重载默认的encode()方法来自定义对象的序列化处理过程。下面的示例展示了如何自定义对象的序列化处理,并将该对象转换为JSON格式的字符串:

import json

class Person:

def __init__(self, name, age, city):

self.name = name

self.age = age

self.city = city

class PersonEncoder(json.JSONEncoder):

def default(self, obj):

if isinstance(obj, Person):

return {"name": obj.name, "age": obj.age, "city": obj.city}

return super().default(obj)

person = Person("John", 30, "New York")

person_json = json.dumps(person, cls=PersonEncoder)

print(person_json)

# 输出结果:

# {"name": "John", "age": 30, "city": "New York"}

从上述示例中,我们自定义了一个Person对象,并使用自定义的PersonEncoder进行序列化处理,最终将该对象转换为JSON格式的字符串。

6. 总结

在Python中,标准库中的json模块提供了一种非常方便的JSON编解码功能,可以使用json.dumps()将Python对象转换为JSON格式的字符串,并使用json.loads()将JSON格式的字符串转换为Python对象。除此之外,我们也可以使用json.dump()和json.load()函数来实现JSON数据的文件读写,同时也可以通过自定义json.JSONEncoder类来实现JSON格式的自定义输出。

后端开发标签