100% ローカル — データがブラウザの外に出ることはありません

JSONをJSON Schemaに変換|CIで使える取り決めにする

JSONのサンプルを、draft 2020-12 の JSON Schema に変換します。必須キーと additionalProperties は切り替えられるので、意図どおりの取り決めになります。

高速 プライベート Cookieゼロ
インデント

JSON 入力

JSON Schema 出力

このツールの動作

JSON の標本が、draft 2020-12 の JSON Schema になります。

{ "id": 1, "name": "Ada", "address": { "city": "Paris" } }
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": { "type": "integer" },
    "name": { "type": "string" },
    "address": {
      "type": "object",
      "properties": { "city": { "type": "string" } },
      "required": ["city"]
    }
  },
  "required": ["id", "name", "address"]
}

入れ子のオブジェクトはその場に書かれます。$defs の節も $ref もありません。標本については、展開した図式のほうが上から下へ読めます。

切り替えが二つ、どちらの答えにも理があるから

  • 必須の鍵。 既定で有効です。標本のすべての鍵が並びます。無効にすると required の配列は出ず、鍵の欠けた文書も通ります。
  • additionalProperties。 既定では緩く、余分な鍵は通ります。厳しくすると、すべてのオブジェクトに "additionalProperties": false が付き、予期しない鍵は誤りになります。

どちらも標本からは読み取れません。あなたの API についての主張なので、ここで推測せず、あなたに委ねます。

integer と number は字面から

3 は integer、3.0 と 1e3 は number です。JSON の数値型は一つきりなので、数値の書かれ方が、それを生んだものの唯一の痕跡です。10.0 を整数と呼ぶ図式は 10.5 を拒みます。おそらく次の一件です。これらの頁を書く過程で欠陥が見つかり、直すまで、この道具はまさにそれをしていました。

標本が述べていないこと

  • "n": null は {"type": "null"} になります。 ほかを受け付けない図式です。null を許す文字列なら、{"type": ["string", "null"]} に直してください。
  • 空の配列は {"type": "array"} になり、items は付きません。見たことのない要素について何も主張しないためです。
  • 型の混ざった配列は anyOf になり、そこにある形だけを並べます。
  • format も minLength も pattern もありません。 電子メールも UUID も普通の文の文字列も、ここではすべて "type": "string" です。"format": "email" を足すことは、構造を読むことではなく意味を当てにいくことです。そして、その項目を知っているなら、手で最初に足すとよいのもそれです。

プライバシー

すべての処理はブラウザ内のJavaScriptだけで完結します。データがアップロードされることはないため、機密情報でも安心して利用でき、オフラインでも動作します。

よくある質問

なぜすべてが `required` に入るのですか。
標本にすべての鍵があったからで、文書が支えるのはその主張だけです。これは切り替えでもあります。切れば `required` の配列自体が出ません。入れておけば、鍵が欠けたときに大きな声で失敗する図式になります。たいていはそのほうが出発点として役に立ちます。
なぜ `$defs` の節がないのですか。
図式を展開して書いているからです。入れ子のオブジェクトは現れた場所に書かれます。同じ形が二度出てきてもそうです。標本にはそのほうが読みやすく、検証の結果は変わりません。大きな図式を整理するなら、繰り返す部分図式を `$defs` へ移して `$ref` で参照する手入れに値します。
`integer` と `number` は何で決まりますか。
字面です。`3` は `integer`、`3.0` と `1e3` は `number` になります。JSON の数値型は一つきりで、書かれた形が元を示す唯一の証拠だからです。`10.0` を整数と呼ぶ図式は `10.5` を——次の一件を——拒みます。直すまで、この道具はまさにそれをしていました。

関連ツール