Python写入JSON文件
JSON(JavaScript Object Notation)是一种轻量级的数据格式,广泛应用于前后端数据交互和数据存储。Python可以通过内置的json
库,将Python对象序列化为JSON格式,便于数据传输和存储。下面是一个简单的示例,将Python列表数据写入JSON文件:
import json
data = {'name': 'Alice', 'age': 18, 'hobbies': ['reading', 'sports']}
with open('data.json', 'w') as f:
json.dump(data, f)
使用json.dump()
函数将Python字典对象data
写入文件data.json
中。如果文件不存在,则会自动创建;如果文件中已有数据,会被新的数据覆盖。如果要追加数据而非覆盖,可以使用json.dump()
函数的append
参数。
Python写入JSON文件怎么换行
JSON文件通常是单行存储,即所有的数据都在一行中,不方便查看和编辑。我们可以通过使用json.dump()
函数的indent
参数控制换行和缩进。以下是示例代码:
data = {'name': 'Bob', 'age': 20, 'hobbies': ['music', 'travel']}
with open('data.json', 'w') as f:
json.dump(data, f, indent=2)
indent
参数指定缩进的空格数,本例中设置为2。执行后,数据将以带缩进的多行格式存储在data.json
文件中。
Python写入JSON不追加
在Python写入JSON文件时,如果文件中已经存在数据,新的数据默认会覆盖旧的数据。如果需要在文件末尾追加新数据而非覆盖旧数据,可以使用json.dump()
函数的append
参数。以下是示例代码:
data = {'name': 'Clare', 'age': 22, 'hobbies': ['cooking', 'photography']}
with open('data.json', 'a') as f:
json.dump(data, f, indent=2)
注意,这里的写入模式使用的是"a"
而非"w"
,表示以追加模式打开文件。另外,JSON文件的格式仍然是单行存储,只是被多次写入(追加)。
Python写入JSON文件乱码
有时在写入JSON文件时,可能会遇到中文乱码的问题。这是因为在默认情况下,Python使用ASCII编码将字符串转化为JSON格式,如果字符串包含中文等非ASCII字符,就会出现乱码。可以使用json.dump()
函数的ensure_ascii
参数控制编码方式。以下是示例代码:
data = {'name': '张三', 'age': 24, 'hobbies': ['coding', 'guitar']}
with open('data.json', 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=2)
在打开文件时,需要指定编码方式为utf-8
。设置ensure_ascii
参数为False
后,Python会使用utf-8
编码将字符串转化为JSON格式,避免中文乱码。
Python写入JSON没有文件
在写入JSON文件时,如果文件不存在,Python会自动创建。但如果文件所在的目录不存在,会出现异常信息。可以使用os
库的makedirs
函数创建目录。以下是示例代码:
import os
if not os.path.exists('data'):
os.makedirs('data')
data = {'name': '李四', 'age': 26, 'hobbies': ['movie', 'fashion']}
with open('data/data.json', 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=2)
在本例中,如果data
文件夹不存在,会先使用os.makedirs()
函数创建data
文件夹。然后使用open()
函数打开data.json
文件并写入数据。
Python写入JSON文件不识别中文
在Python写入JSON文件时,如果字符串中包含中文,可能会出现编码不正确的问题。这是因为JSON规范中,只支持Unicode编码,不支持其他编码。可以使用Python的unicode()
函数将字符串转化为Unicode编码。以下是示例代码:
data = {'name': unicode('王五', 'utf-8'), 'age': 28, 'hobbies': ['basketball', 'fitness']}
with open('data.json', 'w') as f:
json.dump(data, f, ensure_ascii=False, indent=2)
在本例中,使用unicode()
函数将字符串'王五'
转化为Unicode编码,避免编码不正确的问题。
Python写入JSON数组并解析
在实际工作中,经常会遇到需要将多个数据以数组(列表)的形式写入JSON文件,或者从JSON文件读取数组数据并进行解析的情况。以下是写入JSON数组的示例代码:
import json
data = [{'name': 'Alice', 'age': 18}, {'name': 'Bob', 'age': 20}, {'name': 'Clare', 'age': 22}]
with open('data.json', 'w') as f:
json.dump(data, f, indent=2)
在本例中,使用Python的列表数据类型存储多个字典数据,然后将其写入JSON文件中。可以使用json.load()
函数从JSON文件中读取数据,并解析为Python对象。以下是解析JSON数组的示例代码:
with open('data.json', 'r') as f:
data = json.load(f)
print(data[1]['name']) # 输出 'Bob'
在本例中,使用json.load()
函数从data.json
文件中读取数据,将其解析为列表类型的Python对象。可以通过下标访问列表元素,或者使用循环遍历整个列表。
Python获取JSON中的某个值
在Python处理JSON数据时,经常需要获取JSON对象中的某个键值对。可以使用Python的字典操作符或者get()
函数获取指定键的值。以下是示例代码:
import json
data = {'name':'David', 'age':30, 'hobby': 'reading'}
json_str = json.dumps(data)
# 使用Python的字典操作符获取键值对
print(data['age']) # 输出 30
# 使用get()函数获取值
data_dict = json.loads(json_str) # 将JSON字符串解析为Python对象
hobby = data_dict.get('hobby', 'No hobby!') # 获取键'hobby'对应的值或者默认值'No hobby!'
print(hobby) # 输出 'reading'
在本例中,使用Python的字典操作符或者get()
函数获取键为'age'
和'hobby'
的值。另外,使用json.loads()
函数将JSON字符串解析为Python对象。