json
json(javascript object notation)是一种轻量级的数据交换格式,广泛用于在客户端和服务器之间传输数据。以下是 python 中使用 json 的一些常见用法:
1. 将 python 对象转换为 json 字符串
使用 json.dumps()
函数将 python 对象(如字典、列表等)转换为 json 字符串。
import json # python 字典 data = { "name": "alice", "age": 30, "city": "new york", "skills": ["python", "machine learning"] } # 转换为 json 字符串 json_str = json.dumps(data) print(json_str)
输出示例:
{"name": "alice", "age": 30, "city": "new york", "skills": ["python", "machine learning"]}
2. 将 json 字符串解析为 python 对象
使用 json.loads()
函数将 json 字符串解析为 python 对象(如字典、列表等)。
json_str = '{"name": "alice", "age": 30, "city": "new york", "skills": ["python", "machine learning"]}' # 将 json 字符串解析为 python 字典 data = json.loads(json_str) print(data)
输出示例:
{'name': 'alice', 'age': 30, 'city': 'new york', 'skills': ['python', 'machine learning']}
3. 将 python 对象写入 json 文件
使用 json.dump()
函数将 python 对象写入到 json 文件中。
import json data = { "name": "alice", "age": 30, "city": "new york", "skills": ["python", "machine learning"] } # 将 python 对象写入 json 文件 with open('data.json', 'w') as json_file: json.dump(data, json_file)
4. 从 json 文件读取数据
使用 json.load()
函数从 json 文件中读取数据并解析为 python 对象。
import json # 从 json 文件读取数据 with open('data.json', 'r') as json_file: data = json.load(json_file) print(data)
输出示例:
{'name': 'alice', 'age': 30, 'city': 'new york', 'skills': ['python', 'machine learning']}
5. 自定义 json 编码
如果你有自定义的类对象并想要将其转换为 json,可以通过实现自定义的编码器:
import json class employee: def __init__(self, name, age, position): self.name = name self.age = age self.position = position # 自定义的 json 编码器 def encode_employee(obj): if isinstance(obj, employee): return {'name': obj.name, 'age': obj.age, 'position': obj.position} raise typeerror(f"object of type {obj.__class__.__name__} is not json serializable") # 创建 employee 对象 employee = employee("john", 28, "software engineer") # 使用自定义编码器将对象转换为 json 字符串 json_str = json.dumps(employee, default=encode_employee) print(json_str)
输出示例:
{"name": "john", "age": 28, "position": "software engineer"}
6. 格式化 json 输出
使用 json.dumps()
时,可以通过 indent
参数生成格式化的 json 字符串,便于阅读。
import json data = { "name": "alice", "age": 30, "city": "new york", "skills": ["python", "machine learning"] } # 生成格式化的 json 字符串 json_str = json.dumps(data, indent=4) print(json_str)
输出示例:
{ "name": "alice", "age": 30, "city": "new york", "skills": [ "python", "machine learning" ] }
7. 处理复杂对象
如果需要序列化更复杂的对象,可以通过自定义 jsonencoder
类来处理。
import json class employee: def __init__(self, name, age, position): self.name = name self.age = age self.position = position class employeeencoder(json.jsonencoder): def default(self, obj): if isinstance(obj, employee): return {'name': obj.name, 'age': obj.age, 'position': obj.position} return super().default(obj) employee = employee("john", 28, "software engineer") # 使用自定义的编码器将对象转换为 json 字符串 json_str = json.dumps(employee, cls=employeeencoder) print(json_str)
输出示例:
{"name": "john", "age": 28, "position": "software engineer"}
jsonl
jsonl(json lines)是一种简单的文件格式,专门用于存储多个json对象,每个对象占用一行。jsonl文件的扩展名通常为 .jsonl
或 .ndjson
(newline delimited json)。这种格式在处理大量结构化数据时非常有效,因为它允许逐行读取和处理数据。
下面是jsonl的常见用法示例,包括如何在python中读取和写入jsonl格式的数据。
1. jsonl 文件的结构
一个jsonl文件可能看起来如下:
{"name": "alice", "age": 30, "city": "new york"} {"name": "bob", "age": 25, "city": "los angeles"} {"name": "charlie", "age": 35, "city": "chicago"}
每一行都是一个有效的json对象,行与行之间用换行符 \n
分隔。
2. 读取 jsonl 文件
使用python读取jsonl文件时,可以逐行处理文件中的json对象:
import json # 读取 jsonl 文件 with open('data.jsonl', 'r') as jsonl_file: for line in jsonl_file: # 解析每一行的 json 对象 data = json.loads(line) print(data)
输出示例:
{'name': 'alice', 'age': 30, 'city': 'new york'} {'name': 'bob', 'age': 25, 'city': 'los angeles'} {'name': 'charlie', 'age': 35, 'city': 'chicago'}
3. 写入 jsonl 文件
写入jsonl文件时,可以逐行将多个json对象写入文件,每个对象占用一行:
import json # 准备要写入的多个 json 对象 data_list = [ {"name": "alice", "age": 30, "city": "new york"}, {"name": "bob", "age": 25, "city": "los angeles"}, {"name": "charlie", "age": 35, "city": "chicago"} ] # 写入 jsonl 文件 with open('data.jsonl', 'w') as jsonl_file: for data in data_list: jsonl_file.write(json.dumps(data) + '\n')
4. 追加写入 jsonl 文件
如果需要追加数据到已有的jsonl文件中,可以使用追加模式 'a'
:
import json # 要追加写入的 json 对象 new_data = {"name": "diana", "age": 28, "city": "houston"} # 追加写入 jsonl 文件 with open('data.jsonl', 'a') as jsonl_file: jsonl_file.write(json.dumps(new_data) + '\n')
5. 处理大数据集
由于jsonl格式允许逐行读取和处理数据,特别适合用于处理大数据集。比如当数据量较大时,可以用下面的方式逐行读取并处理,而不需要将整个文件一次性加载到内存中:
import json # 逐行处理大数据集 with open('large_data.jsonl', 'r') as jsonl_file: for line in jsonl_file: data = json.loads(line) # 对每一行的数据进行处理 process_data(data)
6. 与pandas集成
如果你需要将jsonl文件的数据加载到pandas dataframe中,pandas的 read_json
方法也支持读取jsonl格式的数据:
import pandas as pd # 使用 pandas 读取 jsonl 文件 df = pd.read_json('data.jsonl', lines=true) print(df)
输出示例:
name age city
0 alice 30 new york
1 bob 25 los angeles
2 charlie 35 chicago
总结
jsonl格式是一种非常实用的数据存储格式,特别适合处理大型、结构化的数据集。使用它的主要优点包括:
- 逐行读取:有效处理大文件,节省内存。
- 简便性:每一行都是独立的json对象,便于解析和处理。
- 灵活性:可以很容易地将数据追加到已有文件中。
通过上述方法,您可以轻松地在python中读取、写入和处理jsonl格式的数据。
到此这篇关于python json jsonl 的用法详解的文章就介绍到这了,更多相关python json jsonl 内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论