JSONをオンラインで検証する方法:開発者向け実践ガイド
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 | "こんにちは" | 常にダブルクォート |
| Number | 42、3.14、-7 | 整数または小数、クォートなし |
| Boolean | true、false | 小文字、クォートなし |
| Null | null | 小文字、クォートなし |
| Array | [1, 2, 3] | カンマ区切りの値 |
| Object | {"key": "value"} | キーと値のペア |
JSONでよくある10のエラー
JSONを扱う際に最も頻繁に遭遇するエラーです:
- 最後の要素の後のカンマ:
{"items": [1, 2, 3,]}— 3の後のカンマが無効。 - ダブルクォートの代わりにシングルクォート:
{'name': 'Taro'}—{"name": "Taro"}でなければならない。 - クォートなしのキー:
{age: 30}—{"age": 30}でなければならない。 - エスケープされていない制御文字:
文字列内のタブや改行は\tと\nとして記述する必要がある。 - 文字列内のエスケープされていないクォート:
{"text": "彼は"こんにちは"と言った"}— エスケープが必要。 - コメント:
JSONはいかなる種類のコメントもサポートしていない。 - NaN、Infinity、undefined:
これらのJavaScriptの値はJSONでは無効。代わりにnullを使用。 - 16進数値:
{"color": 0xFF0000}は無効。{"color": "#FF0000"}を使用。 - 型付き配列での型の混在:
[1, "二", true]は有効なJSONだが、多くのAPIは同種の配列を期待する。 - 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がデータ交換の主流フォーマットでした。両方とも現在も使われていますが、用途が異なります:
| 特徴 | JSON | XML |
|---|---|---|
| 可読性 | より簡潔 | より冗長 |
| サイズ | 30-50%小さい | 大きい |
| データ型 | String、Number、Boolean、Null、Array、Object | すべてテキスト |
| コメント | 非対応 | 対応 |
| スキーマ | JSON Schema | XSD、DTD |
| 主な用途 | REST API、設定 | SOAP、ドキュメント、RSS |
| パース | ネイティブのJSON.parse() | XMLパーサーが必要 |
2026年現在、JSONはWeb開発、API、モバイルアプリケーションで主流です。XMLはレガシーな企業システム、RSS/Atomフィード、DOCXなどのドキュメントフォーマットで使われ続けています。
JSONを日常的に扱うためのツール
検証以外にも、これらの補完ツールが作業を効率化します:
- JSON検証ツール:構文チェック、行番号付きのエラー表示、自動フォーマット。
- コード圧縮ツール:スペースや改行を除去してJSONを圧縮。
- Base64エンコーダー:JSONをBase64にエンコードしてURLやHTTPヘッダーで転送。
- テキスト比較ツール:2つの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が標準的な選択です。