JSONをオンラインで検証する方法:開発者向け実践ガイド

読了時間 8分

JSONの検証、フォーマット、デバッグを簡単に行う方法を学びましょう。よくあるエラー、XMLとの違い、ベストプラクティスと無料オンラインツール付き。

JSONとは何か、なぜ検証が必要か

JSON(JavaScript Object Notation)は、現代のWeb開発で最も広く使われているデータ交換フォーマットです。ほぼすべてのREST APIがJSON形式でデータを返し、package.jsonやtsconfig.jsonなどの設定ファイルもこのフォーマットを使用し、MongoDBのようなデータベースもJSON形式でドキュメントを保存しています。

問題は、たった1つの文字のミス(余分なカンマ、欠落したクォート、閉じられていないブラケット)がJSON全体を無効にし、アプリケーションにエラーを引き起こすことです。API応答で無効なJSONがあるとフロントエンドが壊れます。tsconfig.jsonにシンタックスエラーがあるとTypeScriptがコンパイルできません。

使用前にJSONを検証することで、何時間ものデバッグを節約できます。NexToolsのJSON検証ツールを使えば、任意のJSONを貼り付けて、エラーの正確な行番号を確認し、自動的に整形された出力を得ることができます。

JSONの基本構文:知っておくべきルール

JSONには厳密な構文ルールがあります。いずれかを違反すると無効なJSONが生成されます:

  • キーはダブルクォートで囲む必要がある:{"name": "Ana"}は有効。{name: "Ana"}は無効。
  • 文字列はダブルクォートを使い、シングルクォートは不可:"value"は有効。'value'は無効。
  • 末尾のカンマは不可:{"a": 1, "b": 2}は有効。{"a": 1, "b": 2,}は無効。
  • コメントは不可:JSON内で//も/* */も使えません。
  • 数値にはクォートを付けない:{"age": 25}は有効。{"age": "25"}は動作しますが、値は数値ではなく文字列です。

JSONで許可されるデータ型:

備考
String"こんにちは"常にダブルクォート
Number423.14-7整数または小数、クォートなし
Booleantruefalse小文字、クォートなし
Nullnull小文字、クォートなし
Array[1, 2, 3]カンマ区切りの値
Object{"key": "value"}キーと値のペア

JSONでよくある10のエラー

JSONを扱う際に最も頻繁に遭遇するエラーです:

  1. 最後の要素の後のカンマ:
    {"items": [1, 2, 3,]} — 3の後のカンマが無効。
  2. ダブルクォートの代わりにシングルクォート:
    {'name': 'Taro'}{"name": "Taro"}でなければならない。
  3. クォートなしのキー:
    {age: 30}{"age": 30}でなければならない。
  4. エスケープされていない制御文字:
    文字列内のタブや改行は\t\nとして記述する必要がある。
  5. 文字列内のエスケープされていないクォート:
    {"text": "彼は"こんにちは"と言った"} — エスケープが必要。
  6. コメント:
    JSONはいかなる種類のコメントもサポートしていない。
  7. NaN、Infinity、undefined:
    これらのJavaScriptの値はJSONでは無効。代わりにnullを使用。
  8. 16進数値:
    {"color": 0xFF0000}は無効。{"color": "#FF0000"}を使用。
  9. 型付き配列での型の混在:
    [1, "二", true]は有効なJSONだが、多くのAPIは同種の配列を期待する。
  10. BOM(バイトオーダーマーク):
    一部のエディタがファイルの先頭に不可視バイトを追加し、JSONを無効にする。常にBOMなしのUTF-8で保存する。

これらのエラーはすべてJSON検証ツールで自動的に検出され、各エラーの正確な行と位置が表示されます。

JSONのフォーマットと圧縮

JSONは2つの方法で表示できます:人間が読みやすい整形版(pretty-print)と、効率的な転送のための圧縮版です。

整形されたJSON:

{
  "user": {
    "name": "花子",
    "age": 28,
    "active": true
  }
}

圧縮されたJSON(同じデータ、より少ないバイト数):

{"user":{"name":"花子","age":28,"active":true}}

圧縮版はスペースが少なく(APIやストレージに最適)、整形版は読みやすくデバッグが容易です。

JavaScriptでは:

JSON.stringify(data, null, 2)  // 2スペースで整形
JSON.stringify(data)           // 圧縮

大きなJSONファイルの圧縮には、JSON、CSS、JavaScriptを処理できるコード圧縮ツールを使用してください。

JSON vs XML:それぞれの使い分け

JSON以前は、XMLがデータ交換の主流フォーマットでした。両方とも現在も使われていますが、用途が異なります:

特徴JSONXML
可読性より簡潔より冗長
サイズ30-50%小さい大きい
データ型String、Number、Boolean、Null、Array、Objectすべてテキスト
コメント非対応対応
スキーマJSON SchemaXSD、DTD
主な用途REST API、設定SOAP、ドキュメント、RSS
パースネイティブのJSON.parse()XMLパーサーが必要

2026年現在、JSONはWeb開発、API、モバイルアプリケーションで主流です。XMLはレガシーな企業システム、RSS/Atomフィード、DOCXなどのドキュメントフォーマットで使われ続けています。

JSONを日常的に扱うためのツール

検証以外にも、これらの補完ツールが作業を効率化します:

ブラウザで:

  • JSON.parse(jsonString) — JSON文字列をJavaScriptオブジェクトに変換。JSONが無効な場合はエラーを投げる。
  • JSON.stringify(obj, null, 2) — オブジェクトを整形されたJSONに変換。

JSON Schema:構文だけでなく構造を検証する

構文の検証はJSONが整形式であることだけを確認します。しかし実際のアプリケーションでは、データが正しい構造を持っているかも検証する必要があります。

そのためにJSON Schemaがあります。JSONドキュメントの構造を記述するための標準です:

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "required": ["name", "age", "email"],
  "properties": {
    "name": { "type": "string", "minLength": 1 },
    "age": { "type": "integer", "minimum": 0, "maximum": 150 },
    "email": { "type": "string", "format": "email" }
  }
}

このスキーマを使えば、ユーザーJSONにname(空でない文字列)、age(0から150の整数)、email(有効な形式)があることを自動的に検証できます。Ajv(JavaScript)、jsonschema(Python)、Newtonsoft(.NET)などのライブラリがJSON Schema検証を実装しています。

本番環境でJSONを扱うためのベストプラクティス

実際のプロジェクトでよくある問題を避けるためのプラクティス:

  • 外部ソースからのJSONは常に検証する:API、ユーザーがアップロードしたファイル、webhookから受け取ったJSONは、処理する前にtry-catch内でJSON.parse()を通す。
  • キーにはcamelCaseを使用:JavaScript/TypeScriptの標準的な規約です。user_nameではなくuserName
  • 3-4レベル以上のネストは避ける:深くネストされたJSONは読みにくく、走査しにくく、保守しにくい。
  • 暗号化されていないJSONに機密データを保存しない:トークン、パスワード、秘密鍵は、ログやAPI応答の平文JSONに含めてはならない。
  • オプションフィールドを省略する代わりにnullを使う:{"middleName": null}はフィールドを省略するよりも良い。
  • パースエラーは適切に処理する:JSON.parseの生のエラーをエンドユーザーに表示しない。内部的にログに記録し、分かりやすいメッセージを表示する。

このツールを試す:

ツールを開く

よくある質問

パース時にJSONが'Unexpected token'を表示する理由

「Unexpected token」エラーは、JSON.parseが予期しない文字を見つけたことを意味します。最も一般的な原因は:ダブルクォートの代わりにシングルクォート、最後の要素の後のカンマ、JSON内のコメント、ファイル先頭の不可視なBOM文字です。オンライン検証ツールにJSONを貼り付けて、エラーの正確な位置を確認してください。

JSONファイル内でコメントは使えるか

いいえ。JSON仕様はいかなる種類のコメントも許可していません(//も/* */も不可)。コメント付きのJSONが必要な場合は、JSONC(VS Codeがsettings.jsonで使用)、JSON5、YAMLなどの代替フォーマットを使用できます。

JSONとJavaScriptオブジェクトの違い

JavaScriptオブジェクトはクォートなしのキー、関数を値として、undefined、Symbol、末尾カンマを持てます。JSONはより制限的で:すべてのキーにダブルクォートが必要、string、number、boolean、null、array、objectのみが値として許可、末尾カンマもコメントも不可です。

ブラウザで処理するのに大きすぎるJSONの量

最新のブラウザは50-100MBまでのJSONを問題なくパースできます。それ以上になると、パースがメインスレッドをブロックしてインターフェースをフリーズさせる可能性があります。非常に大きなJSONには、JSONStreamなどのストリーミングパーサーを使うか、サーバー側でデータを処理してください。

JSONをCSVに変換する方法、またはその逆

JSONからCSV:JSONが同じキーを持つオブジェクトの配列である場合、キーが列になり各オブジェクトが行になります。CSVからJSON:各行がヘッダーをキーとしたオブジェクトになります。JavaScriptでプログラム的に行うか、オンラインツールを使用できます。

設定ファイルにはJSONとYAMLのどちらが良いか

ユースケースによります。JSONはより厳密(曖昧なエラーが少ない)、パースが速く、APIの標準です。YAMLは人間にとってより読みやすく、コメントをサポートし、DevOps(Docker Compose、GitHub Actions、Kubernetes)で人気です。人が編集する設定にはYAMLが良い場合が多いです。マシン間のデータにはJSONが標準的な選択です。