JSON期待値バリデーター

CSVで定義したスキーマ・期待値をもとに、複数のJSONテストケースを一括検証します。

入力データはブラウザ内で処理されます
データはサーバーへ送信されません

変換ツール

スキーマ定義CSVと期待値CSV(任意)から、複数のJSONテストケースを一括検証します。すべてブラウザ内で処理され、サーバーには送信されません。

列: key(JSONPath), expected_type(string/number/boolean/array/object/null/any), required(true/false), compare_mode(exact/unordered/contains/length_only、任意)

省略可

1行目: test_case_id, キー1, キー2, ... / 2行目以降: 各テストケースの期待値。空欄はそのキーの型チェックのみ行います。省略した場合は型チェックのみ実施します。

複数の.jsonファイルをドラッグ&ドロップ

ファイルが2つ以上ある場合、上記の期待値CSVのtest_case_idはファイル名から拡張子(.json)を除いたものと一致させてください(例: package.json → package)。ファイルが1つだけの場合は、test_case_idの値に関わらずそのJSON1つに対して全行が検証されます。

上記に入力済みのJSONをツリー表示します。キーや値をクリックするとJSONPathを自動生成し、そのままスキーマ定義CSVに追加できます。

Shift/Ctrl(⌘)キーを押しながらクリックすると複数選択でき、配列要素をまたぐ共通パスを提案します。

「jqコマンドをコピー」で、選択したパスをターミナル上のjqコマンドとして確認できます(ファイル名はケースIDから推測したものです)。条件式が複雑なパスなど、jqに変換できない形式では無効になります。

プレビューできるJSONがありません。上記でJSONを入力するとここに表示されます。

JSON期待値バリデーターとは?

JSON期待値バリデーターは、CSVで定義したスキーマ(型・必須項目)と期待値をもとに、複数のJSONデータをまとめて検証するツールです。 APIレスポンスの回帰テストや、複数パターンのテストフィクスチャの一括チェックなどに役立ちます。

キーの指定にはJSONPathを使用するため、$.datalist[*].id のようなワイルドカードで配列の全要素を一括チェックしたり、$.datalist[?(@.id=="123")].title のようなフィルタ述語で特定の要素の値だけを狙い撃ちで検証したりできます。

使い方

  1. スキーマ定義CSVを入力します(列: key, expected_type, required, compare_mode)。keyにはJSONPath式(ワイルドカード`[*]`やフィルタ述語`[?(@.field=="value")]`にも対応)を指定します。
  2. (任意)期待値CSVを入力します。1列目がtest_case_id、2列目以降が各キーの期待値です。空欄のセルは型チェックのみ行われます。省略した場合は型チェックのみ実施します。
  3. 検証対象のJSONを、複数の.jsonファイルのアップロードまたは直接貼り付け({ "テストケースID": {...}, ... } 形式)で入力します。
  4. 「検証する」を押すと、テストケース×キーのマトリクスで結果が表示されます。不一致(失敗)のセルをクリックすると期待値・実際の値の詳細が確認できます。

よくある質問

Excelファイル(.xlsx)はそのまま使えますか?

直接は読み込めません。Excelで「名前を付けて保存」からCSV形式でエクスポートしてからお使いください。ブラウザ内で完結する軽量な実装のため、CSVのみに対応しています。

配列やオブジェクトの期待値はどう指定しますか?

CSVのセルにJSONリテラル(例 ["a","b","c"] や {"city":"Tokyo"})を記述してください。比較モード(compare_mode列)でexact(完全一致)・unordered(配列の順序無視、デフォルト)・contains(部分一致)・length_only(長さのみ)を指定できます。

配列内の特定の要素だけを検証したい場合は?

JSONPathのフィルタ述語(例 $.items[?(@.id=="123")].name)を使うと、インデックスではなく内容に基づいて要素を特定できるため、配列の順序や長さが変わっても検証が壊れません。

データはサーバーに送信されますか?

いいえ、CSV・JSONの読み込みから検証まで、すべての処理はブラウザ内で完結します。