📘

JSON と JSONL

に公開

1. はじめに

LLM関連でRAGの設計やFTを行う際に、よくJSONやJSONLといったデータ形式が出てきますが、
たまに訳がわからなくなるので、一旦整理しときます。


2. JSON の概要

JSONは、データを「キー」と「値」をセットで整理するためのフォーマットです。
JSONでは「全体がひとつの構造(オブジェクトか配列)」じゃないといけない。

✨基本の形

{
  "name": "Taro",
  "age": 25,
  "student": "True"
}

これが「オブジェクト(object)」と呼ばれる単位。
中括弧{}の中に「キー:値」をカンマで区切って並べます。
{}ひとつが “オブジェクト1個” です。

✅ オブジェクト1個

# JSON形式
{
  "name": "Taro",
  "age": 25
}

✅ 配列1個(中に複数のオブジェクト)

# JSON形式
[
  {"name": "Taro"},
  {"name": "Hanako"},
  {"name": "Jiro"}
]

❌でもこれはNG

# JSON形式ではない
{"name": "Taro"}
{"name": "Hanako"}

見た目はJSONっぽいけど、外側にオブジェクトが2個並んでるからあかん。
JSONとしては「1つのデータ構造」として認められません。

整理すると、、、
✅ 1つのオブジェクト({...})もJSON
✅ 複数のオブジェクトを配列({...},{...})に入れたものもJSON
❌ オブジェクトをそのまま並べただけ({...}{...})はJSONじゃない


3. JSONL(JSON Lines)の概要

JSONL(ジェイソンエル)は、1行ごとに独立したJSONを並べた形式です。
正式名称は JSON Lines。
読み方の通り、「1行 = 1データ」になってます。

✨基本の形

{"name": "Taro", "age": 25}
{"name": "Hanako", "age": 23}

見た目はJSONが何個も並んでるだけですが、
JSONLではこれが正しい形式です。
それぞれの行が**独立したJSON(オブジェクト1個)**として扱われます。

中身を文字列として見ると👇

{"name": "Taro", "age": 25}\n{"name": "Hanako", "age": 23}

この \n が「次のデータの区切り」を意味しています。

✨ JSONとのちがい
普通のJSONでは、こうやって全部を1つの箱(配列)にまとめる必要があります👇

[
  {"name": "Taro", "age": 25},
  {"name": "Hanako", "age": 23}
]

一方、JSONLはまとめなくてOK。
1行ごとに書くだけで、それぞれを独立したデータとして扱えます。


まとめ

  • 実装していてややこしくなった際に、ふと読み返して役立ててもらえれば幸いです。

Discussion