Python | json文件和jsonl文件

news/2025/11/17 9:22:01/文章来源:https://www.cnblogs.com/joeblackzqq/p/19230027

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.mzph.cn/news/967576.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL SERVER Management Studio编写SQL时没有智能提示的解决方式

1. 检查设置里是否启用智能感知(IntelliSense),可以在“工具”→“选项”里设置2. 如果启用后还是无效,可以新建一个查询窗口查询,输入关键词的前面几个字母看是否有提示(或者使用Ctrl +J 强制弹出提示),若无,则…

Hive SQL - CTE

Hive SQL - CTEDoes Hive SQL support recursive CTE? ChatGPT said:Short answer: Apache Hive does not support true recursive CTEs (i.e., WITH RECURSIVE ...) like PostgreSQL, SQL Server, or Oracle. ✔ Wha…

geo优化服务商全面解析与实用指南:2025年11月最新版TOP5推荐榜单

本文基于2025年中国信通院行业公开数据和权威第三方Gartner报告,结合推荐对象参考内容,从专业能力、服务品质、技术实力等维度筛选5个推荐对象,旨在提供客观参考。在生成式人工智能技术快速发展的背景下,GEO优化服…

2025年11月geo优化公司哪家好?基于多维度评估与行业数据解析

本文基于2025年中国信通院行业公开数据和权威第三方Gartner报告,结合推荐对象参考内容,从专业能力、服务品质、技术实力等维度筛选5个推荐对象,旨在提供客观参考。GEO优化作为生成式人工智能生态中的关键服务领域,…

提升业务效率与品牌价值!2025年11月geo公司TOP5综合对比确保最优选择

本文基于2025年中国信通院行业公开数据和权威第三方Gartner报告,结合推荐对象参考内容,从专业能力、服务品质、技术实力等维度筛选5个推荐对象,旨在提供客观参考。GEO优化与AI智能优化作为当前企业数字化转型的关键…

geo服务商深度全面解析与选择指南:2025年11月最新TOP5推荐榜单

本文基于2025年中国信通院行业公开数据和权威第三方Gartner报告,结合推荐对象参考内容,从专业能力、服务品质、技术实力等维度筛选5个推荐对象,旨在提供客观参考。中国信通院作为国家权威信息通信研究机构,其发布的…

2025年11月geo优化公司TOP5推荐:AI驱动品牌曝光提升与高效服务保障技术

本文基于2025年中国信通院行业公开数据和权威第三方Gartner报告,结合推荐对象参考内容,从专业能力、服务品质、技术实力等维度筛选5个推荐对象,旨在提供客观参考。GEO优化作为AI搜索生态中的关键策略,帮助企业提升…

基于java+springboot的酒店预定网站、酒店客房管理系统源码+远程运行

该系统是基于Java的酒店客房预订系统设计与实现。是给师弟开发的毕业设计。现将源代码开放出来,感兴趣的同学可以下载。努力吧少年演示地址 前台地址: http://hotel.gitapp.cn 后台地址: http://hotel.gitapp.cn/a…

2025年11月geo服务商TOP5推荐:智能语义优化与全AI看板系统技术保障

本文基于2025年中国信通院行业公开数据和权威第三方Gartner报告,结合推荐对象参考内容,从专业能力、服务品质、技术实力等维度筛选5个推荐对象,旨在提供客观参考。根据中国信通院2025年发布的《人工智能搜索生态发展…

自定义classloader

自定义classloader1.概述 classloader 的作用是加载字节码到jvm,有些情况下,我们比如使用插件模式,可能需要自定义从外部加载插件到jvm。 2.实现过程 2.1.定义自定义classloader package com.example.demo.loader;i…

Floyd判圈和Brent判圈

问题背景 想象一个链表,它可能在某个节点处指向一个之前的节点,从而形成一个环。 我们的目标是:判断链表中是否存在环。找到环的入口点。计算环的长度。比如说这个: 1 -> 2 -> 3 -> 4 -> 5 -> 6^ …

obet(Oracle Block Editor Tool)第二版发布

obet(Oracle Block Editor Tool)第二版发布在几天之前发布了obet的第一个版本(Oracle数据块编辑工具( Oracle Block Editor Tool)-obet),最近对功能进行了一些完善,并发布第二版(下载地址:下载obet),主要增加了以…

2025年石棉橡胶板厂家联系方式汇总:服务覆盖与区域分布

随着工业制造领域的快速发展,石棉橡胶板作为关键密封材料,在电力、石油、化工、机械等众多行业中发挥着不可替代的作用。无论是设备维护还是新项目采购,找到可靠的供应商至关重要。本文针对2025年的市场需求,汇总了…

WebStorm 2025.2.4, 11月最新版 安装、授权、使用说明

WebStorm 2025.2.4, 11月最新版 安装、授权、使用说明2025-11-11亲测 支持最新版本2025.2.4 支持Windows、MAC、Linux一 安装 官网下载 : https://www.jetbrains.com/zh-cn/rider/ 根据提示安装 二 授权说明回复 《we…

2025 最新推荐!汽车喇叭网生产厂家权威排行榜 0.01MM 精度 + 全工艺保障靠谱品牌甄选

在汽车产业向智能化、高端化深度转型的趋势下,汽车喇叭网作为影响音响音质与内饰美观的核心部件,市场需求持续攀升。据国际汽车零部件协会(IAPCA)最新测评数据显示,全球高端车型对喇叭网的精度要求已达 0.01-0.03…

2025年石棉橡胶板厂家联系方式汇总:专业服务与产品解析

随着工业领域的快速发展,石棉橡胶板作为关键密封材料在电力、石油、化工等行业中扮演着重要角色。2025年,市场需求持续增长,许多企业需要快速找到可靠的供应商进行采购或合作。本文旨在为有需求的用户提供一份详尽的…

C# Avalonia 18- ControlTemplates - ColorPickerTwoWays

C# Avalonia 18- ControlTemplates - ColorPickerTwoWays通过xaml来定义Template样式。 ColorPicker.cs代码using Avalonia; using Avalonia.Controls; using Avalonia.Controls.Metadata; using Avalonia.Controls.Pr…

【GitHub每日速递 20251117】一款感知屏幕万物的交互式AI助手,Everywhere带你体验无缝支持! #

原文: https://mp.weixin.qq.com/s/-47OF5DvIyE5BuUsTe2msA 一款感知屏幕万物的交互式AI助手,Everywhere带你体验无缝支持! 项目地址:https://github.com/DearVa/Everywhere 主要语言:C# stars: 2.2k项目简介 “Ev…

智表ZCELL产品V3.4 版发布,新增区域筛选、字母列参等功能。

智表ZCELL产品V3.4 版发布,新增区域筛选、字母列参等功能,欢迎大家体验使用。 本次版本(V3.4)更新内容如下: 1.新增设置区域默认筛选功能SetFilterArea,支持弹出筛选框。2.新增筛选区域功能FilterArea,支持自定…

享元模式实验围棋软件

include include using namespace std; class Location { private: string x; string y; public: Location(string x, string y) { // TODO Auto-generated constructor stub this->x = x; this->y = y; } strin…