当前位置: 首页 > news >正文

Python | json文件和jsonl文件

Python | json文件和jsonl文件

From: https://www.cnblogs.com/michaelcjl/p/18001404

 

JSON 文件是使用 JSON(JavaScript Object Notation)格式存储数据的文件。它是一种结构化的文本格式,使用键值对的方式表示数据。 JSON 文件通常包含一个根对象,可以包含多个嵌套的对象、数组和基本数据类型。

而 JSONL 文件(JSON Lines),则是一种每行包含一个独立的 JSON 对象的文本文件格式。 每行都是一个有效的 JSON 对象,和json的"list dict"不一样,jsonl的话没有"list",只有一行行的“dict”,使用换行符分隔。相比于 JSON 文件,JSONL 文件更加轻量,每行为独立的 JSON 对象,没有逗号或其他分隔符。这样的好处是方便一行行读取,而不用像json一样只能一次性把"list"里面的"dict”全部都读出来,节省了内存吧,并且还能增加可读性,普通的json文件打开之后会乱糟糟一团。

jsonl的话需要pip安装一个jsonlines包。

JSON文件的内容示例:

[{"name": "John", "age": 30},
{"name": "Jane", "age": 25},
{"name": "Bob", "age": 40}]

JSONL文件的内容示例:

{"name": "John", "age": 30}
{"name": "Jane", "age": 25}
{"name": "Bob", "age": 40}

主要区别如下:
JSON 文件:

  • 使用大括号 {} 表示对象,使用方括号 [] 表示数组。
  • 整个文件是一个有效的 JSON 对象或数组。
  • 适合存储结构化的数据,如配置文件、API 响应等。
  • 一次性读取整个文件,解析成一个 JSON 对象,可以随机访问其中的数据。

JSONL 文件:

  • 每行是一个独立的有效 JSON 对象。
  • 每行之间没有逗号或其他分隔符。
  • 适合存储每行为独立记录的数据,如日志、传感器数据、日志行等。
  • 逐行读取文件,逐行解析 JSON 对象,一次处理一行的数据。

JSONL 文件适合用于以下情况:

  • 当数据以行为单位独立存储,并且每行数据之间没有明确的分隔符时。
  • 当需要逐行处理数据,以节省内存和提高处理速度时。
  • 当数据量非常大,无法一次性加载到内存中时,JSONL 格式提供了一种流式处理数据的方式。

这么对比下来,JSON 文件更适合结构化的数据存储和传输,而 JSONL 文件更适合每行为独立记录的数据存储和处理。

json文件转为jsonlines

import jsonlines
import json
 
with jsonlines.open(write_path, "w") as wfd:
with open(read_path, "r", encoding='utf-8') as rfd:
for data in rfd:
data = json.loads(data)#注意,这里json文件格式不同,写法也不同,具体看文件,,注意区别json.load()与json.loads()
wfd.write(data)

jsonlines转为json文件(原因是jsonlines虽然好用,但并未通用,很多配置文件等都用的json格式)

import jsonlines
import json
 
with jsonlines.open(read_path, "r") as rfd:
with open(write_path, "w", encoding='utf-8') as wfd:
for data in rfd:
json.dump(data, wfd, indent=4, ensure_ascii=False)

python如何读取jsonl文件:

import json
 
jsonl_file = "data.jsonl"
 
with open(jsonl_file, "r") as file:
for line in file:
json_obj = json.loads(line)
# 对 JSON 对象进行处理
print(json_obj["name"], json_obj["age"])

使用 ijson 库用于流式处理 JSONL 文件

请注意,在处理大型 JSONL 文件时,可以使用适当的技术和库进行优化,例如流式处理或批量处理,以减少内存占用和提高性能。这取决于数据量和具体的处理需求。

ijson 是一个流式处理 JSON 数据的 Python 库,它可以有效地处理大型 JSONL 文件。下面是一个示例代码,展示了如何使用 ijson 库来处理 JSONL 文件:

import ijson
 
jsonl_file = "data.jsonl"
 
with open(jsonl_file, "rb") as file:
# 使用 ijson.items 函数读取 JSONL 文件中的每个 JSON 对象
for json_obj in ijson.items(file, "item"):
# 在这里处理 JSON 对象
print(json_obj)

在示例代码中,我们首先使用 open 函数打开 JSONL 文件,并以二进制模式打开文件。然后,我们使用 ijson.items 函数来读取 JSONL 文件中的每个 JSON 对象。第一个参数是打开的文件对象,第二个参数是 JSON 对象的路径。在这个示例中,我们假设每个 JSON 对象的键是 “item”。

在循环内部,你可以根据需要对每个 JSON 对象进行处理。json_obj 是一个 Python 字典,表示当前行的 JSON 对象。

ijson 库的优势在于它以迭代的方式逐行读取 JSONL 文件,并在需要时按需解析 JSON 对象。这样可以大大减少内存的占用,并且适用于处理非常大的 JSONL 文件。

http://www.zskr.cn/news/51711.html

相关文章:

  • 2025年11月geo优化公司哪家好?基于多维度评估与行业数据解析
  • 提升业务效率与品牌价值!2025年11月geo公司TOP5综合对比确保最优选择
  • geo服务商深度全面解析与选择指南:2025年11月最新TOP5推荐榜单
  • WebStorm 2025.2.4, 11月最新版 安装、授权、使用说明
  • 2025 最新推荐!汽车喇叭网生产厂家权威排行榜 0.01MM 精度 + 全工艺保障靠谱品牌甄选
  • C# Avalonia 18- ControlTemplates - ColorPickerTwoWays
  • 享元模式实验围棋软件
  • The 4th Universal Cup. Stage 5: Grand Prix of Nanjing 做题笔记
  • 上述
  • 解密Prompt系列64. Anthropic Skils的延伸思考
  • 悟空来路与关山:AI元人文的终极眺望
  • nssm管理redis服务
  • pyslam(3) 开发语义建图 - MKT
  • Java 字节流与字符流
  • 精读GitHub - swift-markdown-ui
  • Bash的快捷键
  • Linux系统编程初步——冯诺依曼体系结构的理解
  • 2. 使用Gin处理HTTP请求
  • C++之复合类型(四) - Invinc
  • 物流管理,必须掌握的10个要点 - 智慧园区
  • 工程行业中-使用AI报价得可行性-一般(属于能应付但不精确,未测试在数据库全得情况下得效果,总体欠调教)
  • 每日反思(2025_11_16)
  • libvte, xfce4-terminal和gnome-terminal,干货满满
  • 寄卖业务质检1
  • [学习记录整理] ---IP地址,网关,掩码,DNS等
  • 2025 年 11 月不锈钢管件厂家权威推荐榜:欧标卡压管件,国标/薄壁/沟槽不锈钢管件,90/45弯头管件源头厂家精选
  • 2025.11.16总结
  • LeeCode_2 两数相加
  • 2025 年 11 月 CNC 高压清洗机厂家推荐排行榜,CNC全自动高压清洗机,CNC高压去毛刺清洗机,卧式/双工位CNC高压清洗机,数控高压清洗去毛刺机公司推荐
  • 2025 年 11 月 Q355B/Q345B/16Mn 冷拔扁钢厂家推荐排行榜,优质冷拔扁钢,高强度扁钢,精密扁钢公司精选