JSON是用于存储和交换数据的语法,是一种轻量级的数据交换格式。经常用于接口数据传输、序列化、配置文件等
json的形式有2种:键值对形式、数组形式

json的数据形式与python的还是有差别的:
在这里插入图片描述
python可以通过json库,解析字符串或文件中的内容转为json字符串或python的字典或列表

常用方法

方法说明
dumps()将Pythoin对象编码成json字符串
loads()解码json数据,返回python对象
dump()将python对象编码成json数据并写入json文件中
load()从json文件中读取数据并解码为Python对象

可能有些人分不清什么情况下使用哪个方法,有个小tips可以了解下:load是装载的意思,可以理解成是python将json数据装进来使用,即转成Python可识别的对象,那另一个dump就是反过来了。如果是字符串,则需要加s(表示str)。具体用法请看后面的示例~

字符串相关

dumps()和loads()是json字符串和python对象之间的转化

示例:
将python对象转成json字符串

import json

data = {
    "dict": {
        "d1": "v1",
        "d2": None
    },
    "list": [1, 3.56, "12a", (33, -4.4)],
    "str": "str_value",
    "bool_t": True,
    "bool_f": False,
    "NON": None
}

json_data = json.dumps(data)
print(type(json_data))
print(json_data)

执行结果为:

<class 'str'>
{"dict": {"d1": "v1", "d2": null}, "list": [1, 3.56, "12a", [33, -4.4]], "str": "str_value", "bool_t": true, "bool_f": false, "NON": null}

将json字符串转成python对象:

import json

data = '''{
    "dict":{
        "d1":"v1",
        "d2":null
    },
    "list":[
        1,
        3.56,
        "12a",
        [
            33,
            -4.4
        ]
    ],
    "str":"str_value",
    "bool_t":true,
    "bool_f":false,
    "NON":null
}
'''
json_data = json.loads(data)
print(type(json_data))
print(json_data)

执行结果为:

<class 'dict'>
{'dict': {'d1': 'v1', 'd2': None}, 'list': [1, 3.56, '12a', [33, -4.4]], 'str': 'str_value', 'bool_t': True, 'bool_f': False, 'NON': None}

json文件相关

dump()和load()是json文件和python对象之间的转化

import json

data = {
    "key1": "值1",
    "key2": 222,
    "key3": [12, True, False, None, "1ab"]
}

with open("data.json", "w") as f:
    # 将Python对象存入json文件
    json.dump(data, f)

print("--------------------------")
with open("data.json", "r") as f:
    # 从文件中读取json数据并转成python对象
    content = json.load(f)
    print(type(content))
    print(content)


执行成功后,data.json文件内容如下:

{"key1": "\u503c1", "key2": 222, "key3": [12, true, false, null, "1ab"]}

中文被Unicode编码了

dumps()和dump()参数说明

indent

从以上示例中可以看出,python对象转成json字符串或文件时(dumps()和dump()),是紧挨着的,如果想清楚的看出层级关系,可以使用indent设置缩进空格数

import json

data = {
    "key1": "值1",
    "key2": {"key21": "value21", "key22": 22},
    "key3": [12, True, False, None, "1ab"]
}

json_data = json.dumps(data, indent=4)
print(json_data)

执行结果为:

{
    "key1": "\u503c1",
    "key2": {
        "key21": "value21",
        "key22": 22
    },
    "key3": [
        12,
        true,
        false,
        null,
        "1ab"
    ]
}
ensure_ascii

ensure_ascii:对中文使用ASCII编码,默认为True,也就是说在转成json数据时,中文会被编码,如果不想中文被编码,可以将其设置成False

C:\py310\python.exe E:/hogwart/work/wen.py
{
    "key1": "\u503c1",
    "key2": {
        "key21": "value21",
        "key22": 22
    }
}
------------------和平分割线------------------
{
    "key1": "值1",
    "key2": {
        "key21": "value21",
        "key22": 22
    }
}

Process finished with exit code 0

执行结果为:

{
    "key1": "\u503c1",
    "key2": {
        "key21": "value21",
        "key22": 22
    }
}
------------------和平分割线------------------
{
    "key1": "值1",
    "key2": {
        "key21": "value21",
        "key22": 22
    }
}
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐