JSONとは?データ形式の基本と読み書きを解説
JSONは「JavaScript Object Notation」の略で、データをテキストで表現するための形式です。Webアプリケーションの通信やファイルの設定など、さまざまな場面で使われています。この記事では、JSONの基本的な書き方から、プログラムでの読み書き方法まで解説します。
JSONとは何か
JSONは、データを人間にも読みやすく、コンピュータにも処理しやすいテキスト形式で表現するための記法です。もともとはJavaScriptのオブジェクト表記をベースに作られましたが、現在ではほぼすべてのプログラミング言語で利用できます。
JSONが使われる場面
JSONは次のような場面で広く使われています。
- WebサーバーとブラウザのAPI通信
- 設定ファイル(package.json、tsconfig.jsonなど)
- データの保存や受け渡し
- 外部サービスとの連携
なぜJSONが普及したのか
JSON以前は、XMLという形式が主流でした。しかしXMLはタグが多く、データ量に対して記述量が増えがちです。JSONはよりシンプルに書けるため、特にWeb開発の分野で急速に普及しました。
たとえば、同じ「ユーザー情報」を表すとき、XMLとJSONでは次のような違いがあります。
<!-- XML -->
<user>
<name>田中太郎</name>
<age>25</age>
</user>
{
"name": "田中太郎",
"age": 25
}
JSONのほうがシンプルで読みやすいことがわかります。
JSONの書き方
JSONにはいくつかの基本ルールがあります。これらを押さえれば、正しいJSONを書けるようになります。
基本的なデータ型
JSONで使えるデータ型は6種類です。
- 文字列: ダブルクォーテーションで囲む(
"こんにちは") - 数値: そのまま書く(
42、3.14) - 真偽値:
trueまたはfalse - null: 値がないことを表す(
null) - 配列: 角括弧で囲む(
[1, 2, 3]) - オブジェクト: 波括弧で囲む(
{"key": "value"})
オブジェクトの書き方
JSONの最も基本的な形は「キーと値のペア」をまとめたオブジェクトです。
{
"name": "佐藤花子",
"age": 30,
"isStudent": false,
"email": "[email protected]"
}
キーは必ずダブルクォーテーションで囲みます。シングルクォーテーションは使えません。これはJavaScriptのオブジェクトとの大きな違いです。
配列の書き方
複数のデータをまとめるには配列を使います。
{
"fruits": ["りんご", "みかん", "ぶどう"],
"scores": [85, 92, 78]
}
ネスト(入れ子)構造
オブジェクトや配列は入れ子にできます。実際のデータは、たいていこのようなネスト構造になっています。
{
"user": {
"name": "田中太郎",
"address": {
"city": "東京都",
"zip": "100-0001"
},
"hobbies": ["読書", "プログラミング", "映画鑑賞"]
}
}
JSONを書くときの注意点
JSONは厳密なフォーマットです。ちょっとしたミスでエラーになるため、注意が必要です。
よくある間違い
初心者がやりがちなミスをまとめます。
// NG: 末尾のカンマ(トレイリングカンマ)
{
"name": "太郎",
"age": 25,
}
// NG: シングルクォーテーション
{
'name': '太郎'
}
// NG: コメント
{
"name": "太郎" // これはコメントです
}
JSONではコメントが書けないことに注意してください。設定ファイルなどでコメントが必要な場合は、JSON5やJSONCといった拡張形式が使われることがあります。
JSONの検証方法
手書きしたJSONが正しいかどうか不安なときは、プログラムで検証するのが確実です。
import json
text = '{"name": "太郎", "age": 25}'
try:
data = json.loads(text)
print("有効なJSONです")
except json.JSONDecodeError as e:
print(f"JSONが不正です: {e}")
JavaScriptでのJSON操作
JavaScriptにはJSONを扱うための組み込みメソッドが用意されています。
JSON文字列をオブジェクトに変換(パース)
const jsonText = '{"name": "田中太郎", "age": 25}';
// JSON文字列 → JavaScriptオブジェクト
const user = JSON.parse(jsonText);
console.log(user.name); // "田中太郎"
console.log(user.age); // 25
オブジェクトをJSON文字列に変換
const user = {
name: "佐藤花子",
age: 30,
hobbies: ["読書", "旅行"]
};
// JavaScriptオブジェクト → JSON文字列
const jsonText = JSON.stringify(user);
console.log(jsonText);
// {"name":"佐藤花子","age":30,"hobbies":["読書","旅行"]}
// 読みやすくインデント付きで出力
const pretty = JSON.stringify(user, null, 2);
console.log(pretty);
fetch APIでJSONを受け取る
Web開発では、APIからJSONデータを受け取ることが頻繁にあります。
async function getUser() {
const response = await fetch("https://api.example.com/user/1");
const data = await response.json(); // レスポンスをJSONとしてパース
console.log(data.name);
}
response.json() は内部的に JSON.parse() を呼び出しています。
PythonでのJSON操作
Pythonには標準ライブラリの json モジュールが用意されています。
JSON文字列と辞書の変換
import json
# JSON文字列 → Python辞書
json_text = '{"name": "田中太郎", "age": 25}'
data = json.loads(json_text)
print(data["name"]) # 田中太郎
# Python辞書 → JSON文字列
user = {"name": "佐藤花子", "age": 30}
json_text = json.dumps(user, ensure_ascii=False, indent=2)
print(json_text)
ensure_ascii=False を指定しないと、日本語がUnicodeエスケープ(\u7530\u4e2dのような表記)に変換されてしまいます。日本語を含むJSONを扱うときは忘れずに指定しましょう。
JSONファイルの読み書き
import json
# JSONファイルを読み込む
with open("data.json", "r", encoding="utf-8") as f:
data = json.load(f)
# データを加工
data["updated"] = True
# JSONファイルに書き出す
with open("data.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
json.loads() / json.dumps() は文字列を扱い、json.load() / json.dump() はファイルを扱います。末尾の s の有無で使い分けてください。
JSONとほかのデータ形式の比較
JSON以外にもデータ形式はあります。用途に応じて使い分けることが大切です。
YAML
name: 田中太郎
age: 25
hobbies:
- 読書
- プログラミング
YAMLはインデントで構造を表すため、人間が読み書きしやすい形式です。Docker ComposeやCI/CDの設定ファイルでよく使われます。ただし、インデントの揺れがエラーにつながりやすいという弱点もあります。
CSV
name,age
田中太郎,25
佐藤花子,30
CSVは表形式のデータに適しています。Excelで開けるため、非エンジニアとのデータ共有に便利です。ただし、ネスト構造を表現できません。
使い分けの目安
- API通信やプログラム間のデータ受け渡し: JSON
- 設定ファイル(人が編集するもの): YAML
- 表形式のデータやExcel連携: CSV
まとめ
この記事では、JSONの基本を解説しました。
- JSONはデータをテキストで表現するための軽量な形式
- キーと値のペア(オブジェクト)と配列が基本要素
- JavaScriptでは
JSON.parse()/JSON.stringify()で変換する - Pythonでは
jsonモジュールのloads()/dumps()で変換する - コメントやトレイリングカンマは使えない
- API通信や設定ファイルなど幅広い場面で活用されている
JSONはWeb開発において避けて通れない基本知識です。まずはブラウザの開発者ツールやPythonのインタラクティブシェルで、実際にJSONの変換を試してみてください。