Python中处理JSON的常见函数
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:可选参数,表示其他参数,如:strict、object_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:可选参数,表示其他参数,如:strict、scanstring等。
示例:
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
