Python之json模块

1.python的json模块介绍

Python 的 json 模块提供了处理 JSON 数据的功能。JSON(JavaScript Object Notation)是一种轻量级的文本数据格式,使用类似于 JavaScript 对象的方式表示数据。本文将详细介绍 json 模块的所有方法分类,以及含有示例代码。

2. JSON 编码与解码

json 模块提供了将 JSON 数据编码为 Python 对象和将 Python 对象解码为 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):将 Python 对象 obj 转换成 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):将 Python 对象 obj 转换成 JSON 格式后写入文件对象 fp 中。
  • loads(s, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):将 JSON 格式的字符串 s 转换成 Python 对象。 **
  • **load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):从文件对象 fp 中读取 JSON 数据并将其转换成 Python 对象。
import json

# 实现自定义的对象转换方法
def from_json_string(json_string):
    data = json.loads(json_string, object_hook=convert_date)
    return data

def convert_date(obj):
    if '__type__' in obj and obj['__type__'] == 'datetime':
        return datetime.strptime(obj['isoformat'], '%Y-%m-%dT%H:%M:%S.%f')
    return obj

# 将 JSON 字符串转换成 Python 对象
json_str = '{"name": "Alice", "age": 25, "birthday": {"__type__": "datetime", "isoformat": "1996-12-20T08:00:00.000000"}}'
data = from_json_string(json_str)
print(data)  # {'name': 'Alice', 'age': 25, 'birthday': datetime.datetime(1996, 12, 20, 8, 0)}

3. JSON 编码的高级选项

json 模块提供了一些高级选项,允许用户更精细地控制 JSON 编码器的行为:

  • ensure_ascii:指定是否使用 ASCII 码转义非 ASCII 字符,默认为 True。
  • allow_nan:指定是否允许编码 NaN 和 Infinity,默认为 True。
  • indent:指定输出格式中缩进的空格数。
  • sort_keys:指定是否按照键的字典序排序输出。
import json

# 将 Python 对象转换成 JSON 字符串
data = {
    "name": "Alice",
    "age": 25,
    "city": "Shanghai",
    "scores": {
        "math": 90,
        "physics": 85,
        "chemistry": 95
    }
}
json_str = json.dumps(data, ensure_ascii=False, indent=2, sort_keys=True)
print(json_str)
posted @ 2023-03-19 23:09  我不知道取什么名字好  阅读(76)  评论(0编辑  收藏  举报