3秒でわかる
データの構造を文字列として書き表す形式。API のやり取りや設定ファイルの標準として使われ、言語や環境をまたいでそのまま受け渡せるのが利点です。
30秒図解
もう少し詳しく
どういうものか
JSON は、値の構造を文字だけで書き表す形式です。使える型は、オブジェクト、配列、文字列、数値、真偽値、null の 6 つだけです。この少なさのおかげで、どの言語でも同じように読み書きできます。
{
"id": 12,
"name": "ハレノヒ珈琲",
"open": true,
"menu": ["ドリップ", "ラテ"],
"closed_on": null
}なぜ必要か
サーバーとブラウザ、あるいは別々の言語で書かれたプログラムどうしは、メモリ上のオブジェクトをそのまま渡せません。いったん文字列に直して送り、受け取った側が組み立て直す必要があります。この「文字列に直す形」の共通ルールが JSON です。
具体例
JavaScript では 2 つの関数だけで往復できます。
const obj = { name: "ラテ", price: 520 };
const text = JSON.stringify(obj); // '{"name":"ラテ","price":520}'
const back = JSON.parse(text); // オブジェクトに戻る
const res = await fetch("/api/menu");
const menu = await res.json(); // 受信と解釈をまとめてやるPython なら json.dumps と json.loads が同じ役割です。
つまずきやすいところ
末尾のカンマが書けません。JavaScript のオブジェクトリテラルでは許される {"a": 1,} が、JSON では構文エラーになります。手書きの設定ファイルで一番多い失敗です。
コメントも書けません。// を入れた JSON は読み込みに失敗します。説明を残したいときは _comment のようなキーを足すのが現実的な回避策です。
文字列を囲めるのはダブルクォートだけで、シングルクォートは不可です。Python の辞書を print した文字列は見た目が似ていますが JSON ではありません。json.dumps を通します。
日本語を含むときは ensure_ascii=False を付けないと、Python が \u30e9 のようなエスケープに変換します。壊れているわけではありませんが、人が読めなくなります。
似た用語との違い
覚え方
JSON の中身は「かっこの種類」で読み分けられます。波かっこは名前で引く箱、角かっこは順番に並ぶ列です。