JSON 和 JSONL 的区别

news/2024/12/28 4:35:11 标签: json, jsonl

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.niftyadmin.cn/n/5802361.html

相关文章

简述Git中如何将一个新增文件添加到本地仓库?

在Git中&#xff0c;将一个新增文件添加到本地仓库通常需要以下步骤&#xff1a; 将文件添加到暂存区&#xff1a;首先&#xff0c;你需要使用git add命令来将新文件添加到暂存区。 使用文件名&#xff1a;git add <filename>使用点号添加所有文件&#xff1a;git add .使…

20241225在ubuntu20.04.5下监控SSD

20241225在ubuntu20.04.5下监控SSD 2024/12/25 20:29 参考资料&#xff1a; 百度&#xff1a;ubuntu查看ssd寿命 方法 1&#xff1a;使用「磁盘」工具监测 SSD 健康状态 sudo apt install gnome-disk-utility 方法 2&#xff1a;使用 smartctl 工具检查 SSD 健康状态 Ubuntu 和…

网络安全的学习方向和路线是怎么样的?

最近有同学问我&#xff0c;网络安全的学习路线是怎么样的&#xff1f; 废话不多说&#xff0c;先上一张图镇楼&#xff0c;看看网络安全有哪些方向&#xff0c;它们之间有什么关系和区别&#xff0c;各自需要学习哪些东西。 在这个圈子技术门类中&#xff0c;工作岗位主要有以…

Ubuntu22.10/22.04 autoinstall--OK

第一步:建立ubuntu22.04 jammy apt本地源(见本博主对应栏) --------------------------------------------------------------------------------------- ubuntu22.04 grub配置: menuentry Ubuntu22.04-autoinstall(UEFI) --id UBUNTU22.04-autoinstall { echo "…

【前端实现pdf导出】

前端实现pdf导出 在前端实现PDF导出有几种不同的方法&#xff0c;取决于你想要导出的内容类型和复杂度。以下是几种常见的实现方式&#xff1a; 使用 jsPDF&#xff1a; jsPDF 是一个流行的用于生成 PDF 的 JavaScript 库。它允许你在客户端创建 PDF 文档&#xff0c;添加文本…

社区二手物品交易小程序ssm+论文源码调试讲解

第4章 系统设计 一个成功设计的系统在内容上必定是丰富的&#xff0c;在系统外观或系统功能上必定是对用户友好的。所以为了提升系统的价值&#xff0c;吸引更多的访问者访问系统&#xff0c;以及让来访用户可以花费更多时间停留在系统上&#xff0c;则表明该系统设计得比较专…

【Blender】【源码详解】BLI_mesh_boolean 实现详解

1. 背景&#xff1a; 最近因为项目需要&#xff0c;需要阅读 Blender 中关于 mesh boolean 的源码&#xff1b;因此&#xff0c;对 blender 中的 mesh boolean 源码进行解读&#xff1b; Github 上源码下载很慢&#xff0c;一般使用 Gitee: gitee Blender 源码 2. Mesh Boole…

《一文读懂卷积网络CNN:原理、模型与应用全解析》

《一文读懂卷积网络CNN&#xff1a;原理、模型与应用全解析》 一、CNN 基本原理大揭秘&#xff08;一&#xff09;从人类视觉到 CNN 灵感&#xff08;二&#xff09;核心组件详解 二、经典 CNN 模型巡礼&#xff08;一&#xff09;LeNet-5&#xff1a;开山鼻祖&#xff08;二&a…