📜  python中的json编码(1)

📅  最后修改于: 2023-12-03 14:46:38.048000             🧑  作者: Mango

Python中的JSON编码

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,并且易于机器解析和生成。在Python中,可以使用内置的json模块来处理JSON数据。

导入JSON模块

在使用Python进行JSON编码和解码时,需要先导入json模块。

import json
JSON编码

JSON编码是将Python对象转换为JSON格式的过程。Python的数据类型可以通过json模块进行编码,得到对应的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:表示是否跳过非字符串类型的键,默认为False。
  • ensure_ascii:表示是否将所有非ASCII码字符转义为\uXXXX格式,默认为True。
  • check_circular:表示是否检查重复引用,默认为True。
  • allow_nan:表示是否允许NaN、Infinity、-Infinity这类特殊值,默认为True。
  • cls:指定JSONEncoder子类,用于自定义编码行为。
  • indent:表示每一级缩进的空格数,默认为None,表示无缩进。
  • separators:指定分隔符,例如(",", ":")可以让生成的JSON字符串更加紧凑。
  • default:用于处理不可序列化对象的自定义函数。
  • sort_keys:表示是否按照键的字典序排序,默认为False。

返回值为一个JSON格式的str对象。

编码示例
import json

data = {
    'name': 'Tom',
    'age': 18,
    'gender': 'Male',
    'hobbies': ['Reading', 'Running', 'Swimming'],
    'address': {
        'city': 'Beijing',
        'district': 'Haidian',
        'street': 'Haidian Street'
    }
}

json_str = json.dumps(data, ensure_ascii=False, indent=4, sort_keys=True)
print(json_str)

编码结果如下:

{
    "address": {
        "city": "Beijing",
        "district": "Haidian",
        "street": "Haidian Street"
    },
    "age": 18,
    "gender": "Male",
    "hobbies": [
        "Reading",
        "Running",
        "Swimming"
    ],
    "name": "Tom"
}
JSON解码

JSON解码是将JSON格式的字符串解析成Python对象的过程。json模块提供了decode方法来完成这个过程。

json.loads(s, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

参数说明如下:

  • s:JSON格式的字符串。
  • cls:指定JSONDecoder子类,用于自定义解码行为。
  • object_hook:用于解析JSON对象的自定义函数。
  • parse_float、parse_int和parse_constant:用于处理特定类型的自定义函数。
  • object_pairs_hook:用于解析JSON对象的自定义函数,但会以key-value对形式传递。

返回值为解码后的Python对象。

解码示例
import json

json_str = """
{
    "address": {
        "city": "Beijing",
        "district": "Haidian",
        "street": "Haidian Street"
    },
    "age": 18,
    "gender": "Male",
    "hobbies": [
        "Reading",
        "Running",
        "Swimming"
    ],
    "name": "Tom"
}
"""

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

解码结果如下:

{'address': {'city': 'Beijing', 'district': 'Haidian', 'street': 'Haidian Street'}, 'age': 18, 'gender': 'Male', 'hobbies': ['Reading', 'Running', 'Swimming'], 'name': 'Tom'}
JSON文件操作

在Python中,还可以通过json模块来读取和写入JSON文件。

读取JSON文件
with open(filename, 'r', encoding='utf-8') as f:
    data = json.load(f)

其中,filename为要读取的JSON文件的路径。返回值为解码后的Python对象。

写入JSON文件
with open(filename, 'w', encoding='utf-8') as f:
    json.dump(data, f, ensure_ascii=False, indent=4)

其中,data为要写入JSON文件的Python对象。返回值为None。

总结

本文介绍了Python中json模块的基本用法,包括JSON编码、解码、文件操作等。对于处理JSON格式的数据,使用json模块可以很方便地完成数据的转换和操作。