JSON—JavaScript Object Notation—は、構造化データ交換のためのユビキタスなテキストベースのフォーマットです。IETFによってRFC 8259として、またEcma InternationalによってECMA-404として標準化されており、これらが一体となって、現代のAPI、ログ、設定、データベースを支えるコンパクトで言語に依存しない構文を定義しています。
JSONの値は、オブジェクト、配列、文字列、数値、あるいはリテラルのtrue、 false、nullのいずれかです。オブジェクトは文字列を値にマッピングし、配列は順序付けられた値を保持します。構造文字の周りには重要でない空白が許容されます(RFC 8259、ECMA-404)。JSONはJavaScriptから生まれましたが、言語に依存せず、事実上どこでもサポートされています(MDN: JSON)。通信回線上では、事実上の標準であり推奨されるエンコーディングはUTF-8です(RFC 8259 §8.1)。相互運用性の安全性を高めるために、I-JSONプロファイル(RFC 7493)は、エンコーディングと数値範囲に関する規則を厳格化しています。
JavaScriptでは、グローバルなJSONオブジェクトが2つの主力機能を提供します:JSON.parse(オプションのreviver付き)とJSON.stringify(整形出力用のreplacer/spacing付き)で、MDNに記載されています(parse、stringify)。
JSONの数値文法は10進数ですが、仕様では精度や整数/浮動小数点数の区別は規定されていません。実装がそれらをどのように表現するかを選択します(RFC 8259 §6)。JavaScriptとNode.jsでは、NumberはIEEE-754倍精度であり、[−(2^53−1), 2^53−1]の範囲の整数のみが正確に安全です。Number.MAX_SAFE_INTEGERとBigInt型を参照してください。これが、公開APIがIDを文字列として送信し、「安全な整数」を明示的に検証することが多い理由です。
利用が成熟するにつれて、JSONをその場でアドレス指定し、変更するための標準が登場しました。JSONポインタ(RFC 6901)は、値を特定するための小さなスラッシュ区切りの構文で(例:/a/b/0)、~と/のエスケープ規則があります。JSONパッチ(RFC 6902)は、部分的な更新を順序付けられた操作(add、remove、replace、move、copy、test)としてモデル化し、application/json-patch+jsonとして転送されます。より単純な差分については、JSONマージパッチ(RFC 7386)は、ドキュメント形式のマージを使用します。存在するフィールドは追加/置換され、フィールドをnullに設定すると削除されます。多くのフレームワークが、これらの形式の一方または両方を標準でサポートしています。
JSON自体はスキーマレスですが、エコシステムは検証、ドキュメンテーション、コード生成のためにスキーマに依存しています。JSONスキーマ2020-12ファミリーは、type、properties、itemsなどの制約と合成キーワードを指定し、OpenAPI 3.1と整合しています。コード生成中心のワークフロー向けには、JSON Type Definition(RFC 8927)が、主流の型システムに予測可能にマッピングされる、意図的に表現力の低い言語を提供します。
古典的なJSONはペイロードごとに1つの完全なテキストを期待しますが、これはストリーミングログや長寿命のレスポンスを複雑にします。2つのパターンが役立ちます:
application/json-seqとして登録されています。帯域幅や速度が重要な場合、「バイナリJSON」形式はJSONのデータモデルを維持しつつ、人間が読めることと効率をトレードオフします:
JSONは単なるテキストであるため、ほとんどのリスクは転送方法と処理方法に起因します:
<script>経由でデータを要求する)は、クロスオリジンリクエストのCORS以前の回避策でしたが、危険です。任意のスクリプトを実行します。実際のapplication/jsonレスポンスでCORSを優先してください(OWASP: JSONP Abuse)。JSONはRFC 4627 (2006)でデビューしました。登録されたメディアタイプはapplication/jsonで、その仕様は現在RFC 8259を指しています。公共のインターネットではUTF-8がデフォルトであるため、JSONレスポンスの「charset」パラメータは通常不要です。
開発者は、設定ファイルにコメント、末尾のカンマ、または単一引用符で囲まれた文字列を望むことがよくあります。これは標準のJSONの範囲外ですが、JSON5は、人間が編集するファイル向けの十分に文書化されたスーパーセットを提供します。両端を制御できない限り、公開API経由でJSON5を送信することは避けてください。
JSONの成功は、小さな表面積、幅広い言語サポート、そして 分散システムの厄介な現実をカバーする隣接する標準(ポインタ、パッチ、スキーマ、シーケンス)の輪から来ています。基本(構文、エンコーディング、数値)を理解し、適切な隣接する標準に頼ることで、スタックやサービス全体で利益をもたらし続けます(RFC 8259、ECMA-404、RFC 6901、RFC 6902,RFC 7386,JSON Schema,JTD,RFC 7464,NDJSON)。
JSON(JavaScript Object Notation)は、人間が読み書きしやすく、機械が解析および生成しやすい軽量のデータ交換形式です。Webアプリケーションでデータを送信するために広く使用されています。
JSONをフォーマットすると、適切なイ ンデントと改行を追加することで人間が読めるようになります。これは、ミニファイまたは圧縮されたJSONデータを扱う場合、デバッグ、またはAPI応答のレビュー時に特に役立ちます。
JSON検証は、JSON文字列がJSON仕様に準拠しているかどうかをチェックします。欠落しているカンマ、閉じられていない括弧、または不適切な引用符などの構文エラーを識別し、エラーを早期に発見するのに役立ちます。
コードビューは、構文ハイライトを使用してフォーマットされたJSONをテキストとして表示します。これはコードエディターでの表示と似ています。ツリービューは、JSONをインタラクティブな折りたたみ可能な構造として表示し、ネストされたオブジェクトと配列を展開および折りたたむことができます。
はい!すべてのJSONフォーマットと検証はブラウザで完全に行われます。データがコンピューターから出ることはなく、完全なプライバシーとセキュリティが確保されます。
はい、「ファイルを開く」ボタンを使用してJSONファイルをアップロードできます。ツールはファイルを読み取り、フォーマットされた出力をすぐに表示します。
一般的なJSONエラーには、キーと値のペア間のカンマの欠落、文字列に二重引用符ではなく一重引用符を使用すること、末尾のカンマ、閉じられていない括弧または中括弧、引用符で囲まれていないキーが含まれます。
はい、「コピー」ボタンを使用して、フォーマットされたJSONをクリップボードにコピーできます。これは、クリーンアップされたJSONをコードやドキュメントに貼り付けるのに便利です。