5 个 Python 示例,了解用于读写 JSON 文件以进行编码和解码
JSON 代表 JavaScript Object Notation,它是一种结构化数据的格式,与计算机编程中的地图概念非常相似。Maps 由键和相应的值组成。键在映射中必须是唯一的。
JSON 是将数据表示为文件中的文本的轻量级格式,其语法借用了用于创建 JavaScript 对象的语法。海量数据转换为JSON格式,便于各种编程语言的处理和传输到其他节点。它是处理 API 调用时最常用的请求和响应格式。
1. JSON 格式接受的数据类型
JSON 键必须是字符串。大多数语言隐式地将任何其他数据类型转换为字符串。JSON 值可以是字符串、布尔值、整数、浮点数、另一个 JSON 对象或 JSON 数组。
以下是有效 JSON 文件 (data.json) 的示例:
{
"name": "Jason",
"age": 21,
"address": {
"street": "1 Main Street",
"city": "Los Angeles",
"zipcode": 90001
},
"married": false
}
这里,“地址”键的值是另一个 JSON。键“已婚”具有布尔类型的值。
请注意,JSON 不支持注释。此处给出的所有代码片段也与 python 3 兼容。
Python 中最接近 JSON 的数据类型是字典。Python 使用名为 json 的模块(一个内置的 Python 库)支持字典、JSON 和字符串的相互转换。
2. 读取 JSON 文件
JSON 文件通常具有扩展名 .json。但是,python 支持解析任何文件扩展名,直到它包含有效的 JSON。要读取 json 文件并将数据填充到字典中,请使用 json.load()。该函数将文件对象作为参数。以下是说明 json.load() 使用的示例
示例代码片段:
import json
with open("data.json") as f:
p = json.load(f)
print(p, type(p))
print(p["name"], "is", "married" if p["married"] else "not married")
上面例子的输出:
{'name': 'Jason', 'age': 21, 'address': {'street': '1 Main Street', 'city': 'Los Angeles', 'zipcode': 90001}, 'married': False} <class 'dict'>
Jason is not married
这里 f 是文件对象。json.load() 返回一个字典。
3. 将字符串或字节数组读入字典
Json 模块允许用户将 json 以字符串、字节或字节数组的形式解析为字典。这是使用函数 json.loads() 完成的。请注意函数名称与前面描述的函数的相似之处。load() 需要一个文件对象作为参数,而 load() 需要一个字符串作为参数。前者读取文件并隐式调用后者,即loads()。
示例代码片段:
import json
with open("data.json") as f:
file_data = f.read()
p = json.loads(file_data)
print(p, type(p))
print(p["name"], "is", "married" if p["married"] else "not married")
上面例子的输出:
{'name': 'Jason', 'age': 21, 'address': {'street': '1 Main Street', 'city': 'Los Angeles', 'zipcode': 90001}, 'married': False} <class 'dict'>
Jason is not married
4. 将字典写入 JSON 文件
只能将字符串、字节数组或字节写入文件。因此,必须将字典转换为 JSON 格式的字符串才能写入 json 文件。这是使用函数 json.dump() 完成的。该函数将字典和文件对象作为参数。它不返回任何东西。以下是相同的说明。
示例代码片段:
import json
json_dict = {
"name": "Jason",
"age": 21,
"address": {
"street": "1 Main Street",
"city": "Los Angeles",
"zipcode": 90001
},
"married": False
}
print("Type of json_dict:", type(json_dict))
with open("data.json", "w") as f:
json.dump(json_dict, f, indent=4)
上面例子的输出:
Type of json_dict: <class 'dict'>
data.json
{
"name": "Jason",
"age": 21,
"address": {
"street": "1 Main Street",
"city": "Los Angeles",
"zipcode": 90001
},
"married": false
}
请注意,json 文件使用制表符格式化为 4 个空格。由于 json.dump() 函数中的“缩进”参数,这是有效的。
5. 将 JSON 格式的字符串写入文件
在前面的示例中,将字典解析为字符串并写入文件是在一个语句中使用一个函数完成的。在这里,这一步分为两步:首先将字典转换为字符串,保存到变量中,然后写入文件。
示例python代码片段:
import json
json_dict = {
"name": "Jason",
"age": 21,
"address": {
"street": "1 Main Street",
"city": "Los Angeles",
"zipcode": 90001
},
"married": False
}
print("Type of json_dict:", type(json_dict))
with open("data.json", "w") as f:
v = json.dumps(json_dict)
print("v has value", v, "and is of type", type(v))
f.write(v)
上面例子的输出:
Type of json_dict: <class 'dict'>
v has value {"name": "Jason", "age": 21, "address": {"street": "1 Main Street", "city": "Los Angeles", "zipcode": 90001}, "married": false} and is of type <class 'str'>
data.json
{"name": "Jason", "age": 21, "address": {"street": "1 Main Street", "city": "Los Angeles", "zipcode": 90001}, "married": false}
请注意,data.json 文件未格式化。这是因为 json.dumps() 函数中省略了参数“indent”。
- 点赞
- 收藏
- 关注作者
评论(0)