Python json库的使用

Python json库的使用

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,常用于前后端之间的数据交换。Python中提供了json库用于将Python对象转换成JSON格式的字符串,或将JSON格式的字符串转换成Python对象。

JSON格式

先来看一下JSON格式的规则。

  • 数据在名称/值对中
  • 数据由逗号分隔
  • 大括号保存对象
  • 方括号保存数组

以下是一个简单的JSON对象的例子:

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

使用json库将Python对象转JSON字符串

json库中的dumps()方法用于将Python对象转换为JSON格式的字符串。

例如,将一个字典对象转换为JSON字符串:

import json

dict_obj = {'name': 'John', 'age': 30, 'city': 'New York'}
json_str = json.dumps(dict_obj)

print(json_str)
# 输出:{"name": "John", "age": 30, "city": "New York"}

在上面的代码中,通过dumps()方法将一个字典对象转换为JSON格式的字符串。该方法的参数dict_obj指定要转换的Python对象。

使用json库将JSON字符串转Python对象

json库中的loads()方法用于将JSON格式的字符串转换为Python对象。

例如,将一个JSON字符串转换为Python对象:

import json

json_str = '{"name": "John", "age": 30, "city": "New York"}'
dict_obj = json.loads(json_str)

print(dict_obj)
# 输出:{'name': 'John', 'age': 30, 'city': 'New York'}

在上面的代码中,通过loads()方法将一个JSON格式的字符串转换为Python对象。该方法的参数json_str指定要转换的JSON字符串。

读取JSON文件内容

将JSON格式的数据保存在文件中后,可以使用json库读取并转换为Python对象。

例如,读取data.json文件中的数据:

import json

with open('data.json', 'r') as f:
    json_str = f.read()
    dict_obj = json.loads(json_str)

print(dict_obj)
# 输出:{'name': 'John', 'age': 30, 'city': 'New York'}

在上面的代码中,使用open()函数打开data.json文件,并通过read()方法读取JSON字符串。然后使用json库中的loads()方法将JSON字符串转换为Python对象。

写入Python对象到JSON文件

使用json库还可以将Python对象写入到JSON文件中。

例如,将一个Python对象写入到data.json文件中:

import json

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

with open('data.json', 'w') as f:
    json.dump(dict_obj, f)

在上面的代码中,使用json.dump()方法将Python对象dict_obj写入到data.json文件中。该方法的参数f指定保存数据的文件对象。

自定义JSON编码器

在将Python对象转换为JSON字符串时,json库提供了默认的编码规则。如果需要特定的编码规则,可以自定义JSON编码器。自定义编码器是通过继承json.JSONEncoder来实现的。

例如,将一个自定义的类Person转换为JSON字符串:

import json

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

class PersonEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, Person):
            return {"name": obj.name, "age": obj.age}
        return super().default(obj)

person_obj = Person("John", 30)

json_str = json.dumps(person_obj, cls=PersonEncoder)

print(json_str)
# 输出:{"name": "John", "age": 30}

在上面的代码中,自定义了一个类Person,并继承了json.JSONEncoder,实现了一个default()方法。该方法在转换Python对象为JSON字符串时被调用,如果对象是Person类的实例,就将其转换为JSON格式。否则,调用父类的default()方法,在转换为默认格式的JSON字符串。

在将person_obj对象转换为JSON字符串时,通过cls参数指定使用自定义的编码器PersonEncoder

自定义JSON解码器

在将JSON字符串转换为Python对象时,json库提供了默认的解码规则。如果需要特定的解码规则,可以自定义JSON解码器。自定义解码器是通过继承json.JSONDecoder来实现的。

例如,自定义解码器将JSON字符串转换为一个自定义的类Person

import json

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

class PersonDecoder(json.JSONDecoder):
    def decode(self, json_str):
        dict_obj = json.loads(json_str)
        return Person(dict_obj["name"], dict_obj["age"])

json_str = '{"name": "John", "age": 30}'
person_obj = json.loads(json_str, cls=PersonDecoder)

print(person_obj.name)
print(person_obj.age)
# 输出:
# John
# 30

在上面的代码中,自定义了一个类Person,并继承了json.JSONDecoder,实现了一个decode()方法。该方法在将JSON字符串转换为Python对象时被调用,将JSON格式的字典转换为Person类的实例。

在将json_str字符串转换为Python对象时,通过cls参数指定使用自定义的解码器PersonDecoder

小结

本文介绍了Python json库的基本用法,包括将Python对象转换成JSON字符串,将JSON字符串转换成Python对象,读取JSON文件内容以及将Python对象写入JSON文件中。还介绍了如何自定义JSON编码器和解码器。

json库的简单易用,既方便又灵活,适合用于前后端数据交换、数据存储等场景。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程