構文
ルール
{ }オブジェクト(順序なしのキーと値のペア)
[ ]配列(値の順序付きリスト)
"key": valueキーはダブルクォートで囲む必要がある
No trailing comma最後の要素にカンマをつけてはいけない
No commentsJSON はコメントを許可しない
最小限の例
{ "name": "Alice", "age": 30, "active": true }
データ型
6つの値の型
"string"ダブルクォートで囲んだ UTF-8 テキスト
42 / 3.14数値(整数または浮動小数点)
true / falseブール値
nullnull(値の不在)
{ }オブジェクト
[ ]配列
文字列のエスケープシーケンス
\"ダブルクォート
\\バックスラッシュ
\n \t改行、タブ
\uXXXXUnicode エスケープ(16進数)
オブジェクト
オブジェクト構文
{ "id": 1, "name": "Widget", "tags": ["new", "sale"] }
ルール
Keysユニークなダブルクォート文字列でなければならない
Values任意の有効な JSON 型
Orderキーの順序は保証されない
Nestingオブジェクトはオブジェクトを含むことができる
配列
配列構文
[1, "two", true, null, {"key": "val"}]
混合型配列
{ "matrix": [[1, 2], [3, 4]], "empty": [] }
ルール
Ordered要素は挿入順序を維持する
Mixed types配列の要素は異なる型でよい
Indexingゼロベース(ほとんどの言語)
ネスト
ネスト構造
{ "user": { "name": "Alice", "address": { "city": "Boston" }, "scores": [95, 88, 72] } }
アクセスパターン
obj.user.nameドット記法(JavaScript)
obj["user"]["name"]ブラケット記法
obj.user.scores[0]ネストされたオブジェクト内の配列インデックス
スキーマバリデーション
JSON Schema の例
{ "type": "object", "properties": { "name": { "type": "string" }, "age": { "type": "integer", "minimum": 0 } }, "required": ["name"] }
スキーマキーワード
typestring、number、integer、boolean、object、array、null
required必須プロパティ名の配列
properties期待するオブジェクトプロパティを定義
enum固定値セットに制限
minLength / maxLength文字列の長さ制約
minimum / maximum数値の範囲制約
jq の基本
よく使うフィルター
.恒等 — 入力をそのまま渡す
.keyオブジェクトキーにアクセス
.key.nestedネストされたキーにアクセス
.[0]配列の最初の要素
.[]すべての配列要素を反復
select(.age > 20)条件でフィルタリング
map(.name)各要素を変換
length配列の長さまたは文字列の長さ
keysオブジェクトのキーを配列として取得
jq の例
echo '{"a":1}' | jq '.a' # 1 echo '[1,2,3]' | jq 'map(. * 2)' # [2,4,6] cat data.json | jq '.users[].name' cat data.json | jq '.[] | select(.active)'
よく使うパターン
API レスポンス
{ "status": 200, "data": [{"id": 1, "name": "Alice"}], "meta": {"total": 42, "page": 1} }
設定ファイル
{ "host": "localhost", "port": 8080, "debug": false, "features": ["auth", "logging"] }
ヒント
Validatejsonlint または python -m json.tool を使用
Pretty printjq . file.json または python -m json.tool
JSONL1行に1つの JSON オブジェクト(改行区切り)
JSON5 / JSONCコメントと末尾カンマを許可する拡張