欢迎访问宙启技术站
智能推送

Python中处理JSON的常见函数

发布时间:2023-06-22 13:17:45

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它已成为现代 Web 开发中最流行的数据交换格式。Python作为一种强大的编程语言,也提供了许多用于处理JSON数据的常见函数和库。本文将介绍一些Python中处理JSON的常见函数。

## json.loads

json.loads函数用于将JSON字符串解码为Python数据类型。语法如下:

json.loads(json_str, encoding=None, parse_float=None, parse_int=None, parse_constant=None, object_hook=None, **kwargs)

参数说明:

- json_str:必选参数,表示要解码的JSON字符串。

- encoding:可选参数,表示JSON字符串的编码格式,默认为None。

- parse_float:可选参数,表示浮点数解析器,默认为float。

- parse_int:可选参数,表示整数解析器,默认为int。

- parse_constant:可选参数,表示常量解析器,默认为None。

- object_hook:可选参数,表示一个可调用对象,用于将解码后的字典转换为自定义对象,默认为None。

- **kwargs:可选参数,表示其他参数,如:strictobject_pairs_hook等。

示例:

import json

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

print(data)

输出:

{'name': 'Jack', 'age': 30, 'city': 'New York'}

## json.dumps

json.dumps函数用于将Python对象转换为JSON格式的字符串。语法如下:

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)

参数说明:

- obj:必选参数,表示要转换的Python对象。

- skipkeys:可选参数,表示是否跳过非字典类型的键,如果为True,则跳过;如果为False,则抛出TypeError异常,默认为False。

- ensure_ascii:可选参数,表示是否将所有非ASCII字符转义为\uXXXX格式的字符串,默认为True。

- check_circular:可选参数,表示是否检测循环引用,默认为True。

- allow_nan:可选参数,表示是否允许有NaN、Infinity、-Infinity这样的值存在,默认为True。

- cls:可选参数,表示一个自定义的编码器,默认为None。

- indent:可选参数,表示格式化输出时缩进的空格数,如果为非负数,则输出为格式化的JSON字符串,否则为紧凑格式的JSON字符串,默认为None。

- separators:可选参数,表示分隔符,为(,, :)元组,默认为(,, :)。

- default:可选参数,表示一个可调用对象,用于将无法序列化的对象转换为可序列化的对象,默认为None。

- sort_keys:可选参数,表示是否按照键进行排序,默认为False。

- **kw:可选参数,表示其他参数。

示例:

import json

data = {
    "name": "Jack",
    "age": 30,
    "city": "New York"
}

json_str = json.dumps(data)
print(json_str)

输出:

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

## json.dump

json.dump函数用于将Python对象转换为JSON格式的字符串,并将其写入文件中。语法如下:

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

参数说明:

- obj:必选参数,表示要转换的Python对象。

- fp:必选参数,表示文件指针,可以是一个文件对象或一个文件名。

- skipkeys:可选参数,表示是否跳过非字典类型的键,如果为True,则跳过;如果为False,则抛出TypeError异常,默认为False。

- ensure_ascii:可选参数,表示是否将所有非ASCII字符转义为\uXXXX格式的字符串,默认为True。

- check_circular:可选参数,表示是否检测循环引用,默认为True。

- allow_nan:可选参数,表示是否允许有NaN、Infinity、-Infinity这样的值存在,默认为True。

- cls:可选参数,表示一个自定义的编码器,默认为None。

- indent:可选参数,表示格式化输出时缩进的空格数,如果为非负数,则输出为格式化的JSON字符串,否则为紧凑格式的JSON字符串,默认为None。

- separators:可选参数,表示分隔符,为(,, :)元组,默认为(,, :)。

- default:可选参数,表示一个可调用对象,用于将无法序列化的对象转换为可序列化的对象,默认为None。

- sort_keys:可选参数,表示是否按照键进行排序,默认为False。

- **kw:可选参数,表示其他参数。

示例:

import json

data = {
    "name": "Jack",
    "age": 30,
    "city": "New York"
}

with open("data.json", "w") as fp:
    json.dump(data, fp)

## json.load

json.load函数用于从文件读取JSON格式的字符串,并将其解码为Python对象。语法如下:

json.load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

参数说明:

- fp:必选参数,表示文件指针,可以是一个文件对象或一个文件名。

- cls:可选参数,表示一个自定义的解码器,默认为None。

- object_hook:可选参数,表示一个可调用对象,用于将解码后的字典转换为自定义对象,默认为None。

- parse_float:可选参数,表示浮点数解析器,默认为float。

- parse_int:可选参数,表示整数解析器,默认为int。

- parse_constant:可选参数,表示常量解析器,默认为None。

- object_pairs_hook:可选参数,表示一个可调用对象,用于将解码后的字典转换为二元组对象,默认为None。

- **kw:可选参数,表示其他参数,如:strictscanstring等。

示例:

import json

with open("data.json", "r") as fp:
    data = json.load(fp)

print(data)

## json.JSONEncoder

json.JSONEncoder类是一个抽象基类,用于将Python对象编码为JSON格式的字符串。可以通过继承它并重写方法来实现自定义对象的编码。示例代码如下:

import json

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

class UserEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, User):
            return {
                "name": obj.name,
                "age": obj.age,
                "city": obj.city
            }
        else:
            return super().default(obj)

user = User(name="Jack", age=30, city="New York")
json_str = json.dumps(user, cls=UserEncoder)
print(json_str)

输出:

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

## json.JSONDecoder

json.JSONDecoder类是一个抽象基类,用于将JSON格式的字符串解码为Python对象。可以通过继承它并重写方法来实现自定义对象的解码。示例代码如下:

`python

import json

class User:

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

self.name = name

self.age = age

self.city = city

class UserDecoder(json