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