サンプル:
// 整形されたJSONがここに表示されます
有効なJSON
キー数
深度
サイズ

JSONとは?

JSON(JavaScript Object Notation)は、JavaScriptのオブジェクトリテラル構文に由来する軽量のテキストベースデータ交換フォーマットです。RFC 8259で定義され、キーと値のペア(オブジェクト)と順序付きリスト(配列)でデータを表現します。ほぼすべてのモダンプログラミング言語に組み込みのJSONパーサーがあるため、REST API、設定ファイル、データシリアライゼーションで主流のフォーマットです。

JSONは6つのプリミティブ型をサポートしています:stringnumberbooleantrue/false)、nullobject(波括弧)、array(角括弧)。すべての文字列とオブジェクトキーはダブルクォートで囲む必要があります — シングルクォートは有効なJSONではありません。

よくあるJSON構文エラー

JSON仕様は意図的に厳格なため、小さなミスでもパース全体が失敗します。無効なJSONの最も頻繁な原因は:

  • 末尾のカンマ: オブジェクトや配列の最後の要素の後のカンマ — {"a": 1,} — はJSONでは許可されていません。JavaScriptのオブジェクトリテラルや多くの言語では有効ですが、JSON仕様では明示的に禁止されています。
  • シングルクォートの文字列: JSONではすべての文字列とキーにダブルクォートが必要です。{'key': 'value'}は無効で、{"key": "value"}でなければなりません。
  • クォートなしのキー: オブジェクトキーは常にクォートされた文字列でなければなりません。{name: "Alice"}は無効なJavaScriptスタイルの省略形です — JSONでは{"name": "Alice"}が必要です。
  • JavaScriptコメント: JSONは// 単一行/* ブロック */コメントをサポートしていません。設定ファイルでコメントが必要な場合は、JSONCやJSON5を検討してください — ただし、これらは専用のパーサーが必要で、標準のJSONとは互換性がありません。
  • undefined値: undefinedはJavaScriptの概念であり、JSONには表現がありません。undefined値を持つキーはJSON.stringify()で暗黙的に削除されます。
  • エスケープされていない特殊文字: 文字列内の特定の文字はエスケープが必要です:\"(ダブルクォート)、\\(バックスラッシュ)、\n(改行)、\t(タブ)。文字列リテラル内の生の改行は許可されません。

JavaScriptのJSON.parseとJSON.stringify

JavaScriptはJSONを扱うための2つの組み込みメソッドを提供しています:

// JSON文字列をJavaScriptオブジェクトにパース
const data = JSON.parse('{"name":"Alice","age":30}');
console.log(data.name); // "Alice"

// JavaScriptオブジェクトをJSON文字列に変換
const json = JSON.stringify(data, null, 2); // 2スペースインデント

// 常にtry/catchで検証
try {
  const parsed = JSON.parse(userInput);
} catch (e) {
  console.error('無効なJSON:', e.message);
}

// replacer関数でキーをフィルタ
const filtered = JSON.stringify(data, ['name']);
// '{"name":"Alice"}'

現代のソフトウェアアーキテクチャにおけるJSON

JSON(JavaScript Object Notation)は、Webの普遍的なデータ交換フォーマットになりました。REST API、設定ファイル、NoSQLデータベース、メッセージキュー、さらには多くの最新アプリケーションのストレージフォーマットとして使用されています。JSONを深く理解することはすべての開発者にとって不可欠です。

JSONデータ型とその注意点

  • 数値: JSONの数値は整数と浮動小数点の区別がありません — 4242.0は両方有効です。ただし、非常に大きな整数(2^53を超える)はJavaScriptで精度が失われます。Snowflake IDなどには文字列を使用してください。
  • 文字列: ダブルクォートを使用する必要があります — シングルクォートやバッククォートは無効なJSONです。\u00e9のようなUnicodeエスケープがサポートされています。改行は\nとしてエスケープする必要があります。
  • null vs undefined: JSONはnullをサポートしますが、undefinedはサポートしません。JavaScriptオブジェクトをシリアライズする際、undefinedの値は暗黙的に削除されます。
  • コメント不可: 標準JSONではコメントは許可されていません。注釈が必要な設定ファイルにはJSONC(JSON with Comments)やJSON5を使用してください。
  • 末尾カンマ不可: {"a": 1, "b": 2,}は無効なJSONです — 2の後の末尾カンマはパースエラーを引き起こします。

JSONパフォーマンス最適化

大量のJSONデータを処理するアプリケーションでは、以下の最適化がパフォーマンスを大幅に向上させます:

  • ストリーミングパーサー: JSONファイル全体をメモリにロードする代わりに、ストリーミングパーサー(Node.jsのJSONStreamやPythonのijsonなど)を使用してデータをインクリメンタルに処理します。
  • スキーマ検証: JSON Schema(JavaScriptのajvやPythonのjsonschemaなど)を使用してJSON構造を事前に検証し、処理前に不正なデータで早期に失敗させます。
  • バイナリ代替: 内部サービス間通信には、Protocol Buffers、MessagePack、CBORなどのバイナリフォーマットを検討してください。JSONより2〜10倍小さく、パースも高速です。
  • 圧縮: JSON APIではgzipまたはBrotli圧縮を有効にしてください。JSONは繰り返されるキー名と構造により、非常によく圧縮されます(通常80〜90%の削減)。

よくある質問

JSONとは何か、なぜ使われるのか?

JSON(JavaScript Object Notation)はJavaScriptのオブジェクト構文に由来する軽量のテキストベースデータ交換フォーマットです。キーと値のペアと順序付きリストを使用し、人間が読みやすく機械が解析しやすい形式です。JSONはREST API、設定ファイル、データストレージで主流のフォーマットであり、ほぼすべてのプログラミング言語に組み込みのJSONパーサーがあります。

オンラインでJSONを検証するには?

上の入力フィールドにJSONをペーストし、検証ボタンをクリックしてください。このツールはJSON.parse()を使用してJSONをチェックし、無効な場合は正確な構文エラーを行番号と列番号付きで報告します。よくある問題は、末尾のカンマ、シングルクォートの文字列、クォートなしのキー、JavaScriptコメントです — これらはいずれもJSONでは無効です。

JSONとXMLの違いは?

JSONは一般的にXMLよりコンパクトで、解析が速く、読みやすいです。XMLは冗長な開始・終了タグを使用し、属性、名前空間、コメントをサポートします。JSONはほとんどの言語のデータ構造(オブジェクトと配列)に直接マッピングされます。JSONはREST APIではXMLに大きく取って代わりましたが、XMLはSOAPサービス、ドキュメント形式(SVG、DOCX)、エンタープライズシステムでまだ使用されています。

JSONで末尾のカンマが許可されないのはなぜ?

末尾のカンマ(オブジェクトや配列の最後の要素の後のカンマ)はJSON仕様(RFC 8259)では無効です。これはパーサーを簡素化するための厳格な設計決定です。JavaScript自体は配列やオブジェクトリテラルで末尾のカンマを許可しますが、JSON.parse()はSyntaxErrorをスローします。より寛容なフォーマットが必要な場合は、JSON5やJSONC(コメント付きJSON)を検討してください。ただし、これらは専用のパーサーが必要です。

関連する開発者ツール