JSON 和 JSONL 的区别

news2024/12/27 5:30:15

JSON 和 JSONL 的区别

1. JSON 格式
  • 全称: JavaScript Object Notation

  • 结构: JSON 是一种树状嵌套结构,整个文件是一个完整的 JSON 对象。

  • 特点:

    1. 文件中通常只有一个 JSON 对象。
    2. 数据可以嵌套,例如对象中包含数组,数组中包含对象。
    3. 适用于需要表示复杂数据关系的场景。
  • 示例:

[
    {
        "id": 1,
        "name": "Alice",
        "age": 25
    },
    {
        "id": 2,
        "name": "Bob",
        "age": 30
    }
]

2. JSONL 格式
  • 全称: JSON Lines

  • 结构: JSONL 是一个轻量化的格式,每行表示一个独立的 JSON 对象。

  • 特点:

    1. 数据是逐行存储的,每行是一个完整的 JSON 对象。
    2. 文件中的每行可以独立解析,彼此没有嵌套关系。
    3. 适用于需要流式处理或者分布式处理的场景(如日志处理、数据批量加载)。
  • 示例:

{"id": 1, "name": "Alice", "age": 25}
{"id": 2, "name": "Bob", "age": 30}

主要区别

特性JSONJSONL
存储方式整体是一个完整的 JSON 对象每行是一个 JSON 对象
读取方式一次性读取整个文件可以逐行读取和解析
嵌套支持可以嵌套复杂结构每行独立,通常不嵌套
处理场景适合一次性加载的应用适合流式、分布式处理场景
文件大小影响文件越大,加载越慢可以按行加载,处理更高效

使用场景

  1. JSON:

    • 配置文件
    • 小规模数据存储
    • 描述复杂结构的层次化数据
  2. JSONL:

    • 大规模数据处理
    • 日志文件存储
    • 数据流应用(例如机器学习训练数据)

选择建议

  • 文件较小:优先使用 JSON,便于读取和管理。
  • 文件较大:优先使用 JSONL,可以逐行加载,避免内存占用过高。
  • 日志处理/分布式处理:使用 JSONL,每行可以独立处理,适合流式计算。

如果有具体的数据需求或处理场景,可以告诉我,我可以给出更针对性的建议!

加载文件方式

1. with open 加载

# 加载 JSON 文件
with open(data_path, 'r', encoding='utf-8') as f:
    data = json.load(f)

# 加载 JSONL 文件
with open(data_path, 'r', encoding='utf-8') as f:
    data = [json.loads(line.strip()) for line in f]

2. Hugging Face datasets 库加载

from datasets import load_dataset

# 加载 JSON 数据
dataset = load_dataset("json", data_files="path_to_your_file.json")

# 加载 JSONL 数据
dataset = load_dataset("json", data_files="path_to_your_file.jsonl")

# 加载多个 JSON 文件
data_files = {
    "train": "path_to_train.json",
    "test": "path_to_test.json",
}
dataset = load_dataset("json", data_files=data_files)

# dataset的其他用法
dataset = dataset.select(range(5))

# 训练集和验证集比例划分
train_ratio = 0.9
split_dataset = dataset.train_test_split(test_size = 1 - train_ratio)
train_dataset = split_dataset["train"]
eval_dataset = split_dataset["test"]

# 数据预处理函数: 将每个数据转化为 input_ids、labels、attention_mask
def tokenize_function(examples):
    return tokenizer(
        # examples["input"] + examples["output"],
        examples["input"]
        padding="max_length",
        truncation=True,
        max_length=max_seq_length,
    )

# tokenizer分词获取 input_ids、labels、attention_mask
train_dataset = train_dataset.map(tokenize_function, batched=True, remove_columns=["input", "output"])
eval_dataset = eval_dataset.map(tokenize_function, batched=True, remove_columns=["input", "output])

# 省略中间代码 ………………

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=train_dataset,
    eval_dataset=eval_dataset,
    data_collator=data_collator,
)

输出如下: 

Generating train split: 3 examples [00:00, 429.49 examples/s]
DatasetDict({
    train: Dataset({
        features: ['input', 'output'],
        num_rows: 3
    })
})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2266179.html

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

相关文章

探索数据的艺术:R语言与Origin的完美结合

探索数据的艺术:R语言与Origin的完美结合 R语言统计分析与可视化从入门到精通内容简介获取方式 Origin绘图深度解析:科研数据的可视化艺术内容简介获取方式 R语言统计分析与可视化从入门到精通 内容简介 本书循序渐进、深入讲解了R语言数据统计分析与应…

python基础训练之元组的基本操作

主页包含元组基础知识点 【练习要求】 针对于元组的知识点进行常用的创建、定义、查询元素、查看元组长度等操作。效果实现如下 (注:特别要注意一下切片的用法) #创建元组的两种方法 T1 () T2 tuple() #定义一个元组并存储数据张三, 李四, 王五 T3 (张三, 李四…

选煤厂可视化技术助力智能化运营

通过图扑 HT 可视化搭建智慧选煤厂管理平台,优化了选煤生产流程,提高了资源利用率和安全性,助力企业实现智能化运营和可持续发展目标。

C语言基础:指针(数组指针与指针数组)

数组指针与指针数组 数组指针 概念:数组指针是指向数组的指针,本质上还是指针 特点: 先有数组,后有指针 它指向的是一个完整的数组 一维数组指针: 语法: 数据类型 (*指针变量名)[行容量][列容量]; 案…

接口测试Day03-postman断言关联

postman常用断言 注意:不需要手敲,点击自动生成 断言响应状态码 Status code:Code is 200 //断言响应状态码为 200 pm.test("Status code is 200", function () {pm.response.to.have.status(200); });pm: postman的实例 test() …

01- 三自由度串联机械臂位置分析

三自由度串联机械臂如下图所示(d180mm,L1100mm,L280mm),利用改进DH法建模,坐标系如下所示: 利用改进DH法建模,该机器人的DH参数表如下所示: 对该机械臂进行位置分析&…

lxml 解析xml\html

from lxml import etree# XML文档示例 xml_doc """ <root><book><title>Python编程指南</title><author>张三</author></book><book><title>Python高级编程</title><author>李四</autho…

用Python写炸金花游戏

文章目录 **代码分解与讲解**1. **扑克牌的生成与洗牌**2. **给玩家发牌**3. **打印玩家的手牌**4. **定义牌的优先级**5. **判断牌型**6. **确定牌型优先级**7. **比较两手牌的大小**8. **计算每个玩家的牌型并找出赢家**9. **打印结果** 完整代码 以下游戏规则&#xff1a; 那…

基于 SpringBoot微信小程序的医院预约挂号系统

摘 要 时代在飞速进步&#xff0c;每个行业都在努力发展现在先进技术&#xff0c;通过这些先进的技术来提高自己的水平和优势&#xff0c;医院预约挂号系统当然不能排除在外。医院预约挂号系统是在实际应用和软件工程的开发原理之上&#xff0c;运用微信开发者、java语言以及…

高仿CSDN编辑器,前端博客模板

高仿CSDN编辑器纯前端模板&#xff0c;使用的js、html、vue、axios等技术&#xff0c;网络请求库已进行封装&#xff0c;可以按需调整界面,需要源码联系(4k左右)。 1.支持代码高亮 2.支持目录点击定位 3.支持文件上传、图片上传&#xff08;需要自己写后端接口&#xff09; 4.M…

【C++11】类型分类、引用折叠、完美转发

目录 一、类型分类 二、引用折叠 三、完美转发 一、类型分类 C11以后&#xff0c;进一步对类型进行了划分&#xff0c;右值被划分纯右值(pure value&#xff0c;简称prvalue)和将亡值 (expiring value&#xff0c;简称xvalue)。 纯右值是指那些字面值常量或求值结果相当于…

在线oj项目 Ubuntu安装vue/cil(vue脚手架)

参考:https://blog.csdn.net/weixin_66062303/article/details/129046198 笔记 参考:https://blog.csdn.net/m0_74352571/article/details/144076227 https://cli.vuejs.org/zh/guide/installation.html 确保nodejs已经安装 npm换源淘宝镜像&#xff08;可以不操作或者使用魔…

Python字符串及正则表达式(十一):正则表达式、使用re模块实现正则表达式操作

前言&#xff1a;在 Python 编程的广阔天地中&#xff0c;字符串处理无疑是一项基础而关键的技能。正则表达式&#xff0c;作为处理字符串的强大工具&#xff0c;以其灵活的模式匹配能力&#xff0c;在文本搜索、数据清洗、格式验证等领域发挥着不可替代的作用。本系列博客已经…

项目37:简易个人健身记录器 --- 《跟着小王学Python·新手》

项目37&#xff1a;简易个人健身记录器 — 《跟着小王学Python新手》 《跟着小王学Python》 是一套精心设计的Python学习教程&#xff0c;适合各个层次的学习者。本教程从基础语法入手&#xff0c;逐步深入到高级应用&#xff0c;以实例驱动的方式&#xff0c;帮助学习者逐步掌…

华为:数字化转型只有“起点”,没有“终点”

上个月&#xff0c;我收到了一位朋友的私信&#xff0c;他询问我是否有关于华为数字化转型的资料。幸运的是&#xff0c;我手头正好收藏了一些&#xff0c;于是我便分享给他。 然后在昨天&#xff0c;他又再次联系我&#xff0c;并感慨&#xff1a;“如果当初我在进行企业数字…

count(1)、count(_)与count(列名)的区别?

大家好&#xff0c;我是锋哥。今天分享关于【count(1)、count(_)与count(列名)的区别&#xff1f;】面试题。希望对大家有帮助&#xff1b; count(1)、count(_)与count(列名)的区别&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 SQL 中&#xff0c…

AAAI-2024 | 大语言模型赋能导航决策!NavGPT:基于大模型显式推理的视觉语言导航

作者&#xff1a;Gengze Zhou, Yicong Hong, Qi Wu 单位&#xff1a;阿德莱德大学&#xff0c;澳大利亚国立大学 论文链接&#xff1a; NavGPT: Explicit Reasoning in Vision-and-Language Navigation with Large Language Models &#xff08;https://ojs.aaai.org/index.p…

Linux高级--2.4.1 网络概念(分层、TCP)

关于网络分层理解的难点 对于一般人&#xff08;不参与设计和维护网络协议栈的人&#xff09;来讲&#xff0c;物理层和应用层很容易理解&#xff0c;也很好记住。首先&#xff0c;物理层是看的到的网线、基站的实体。再者&#xff0c;应用层是用户自己参与编写的程序。 而那…

使用VSCode Debugger 调试 React项目

一般我们调试代码时&#xff0c;用的最多的应该就是console.log方式了&#xff0c;还有的是使用Chrome DevTools 通过在对应的 sourcemap代码位置打断点进行调试&#xff0c;除了上面两种方式外还有一种更好用的调试方式&#xff1a; VSCode Debugger。 VSCode Debugger可以直…

Redis-十大数据类型

Reids数据类型指的是value的类型&#xff0c;key都是字符串 redis-server:启动redis服务 redis-cli:进入redis交互式终端 常用的key的操作 redis的命令和参数不区分大小写 &#xff0c;key和value区分 查看当前库所有的key keys * 判断某个key是否存在 exists key 查看key是什…