web-dev-qa-db-ja.com

javascriptのスキーマに対してjsonを検証する

質問:

JSONスキーマに対してJSONスクリプトを検証するプレーンまたはネイティブのJavaScriptの方法はありますか?

Githubでたくさんのライブラリを見つけましたが、ネイティブ/プレーンなソリューションはありません。 EcmaScriptにはこれに関する仕様がありませんか?そして、どのブラウザー(またはnodejs)にもJSONをネイティブに検証する方法がありませんか?

質問のコンテキスト:

私が開発した非常に複雑なスキーマがあります。スキーマに準拠するために渡されるJSONデータを必要とするスクリプトと一緒に機能することになっています。

8
user3186555

単純に、いいえ。

JSON Schema というものがありました。これは2013年に期限切れになったインターネットドラフトでした。インターネットドラフトは インターネット標準 を作成するための最初の段階です。詳細については、 公式サイト を参照してください。これは、(私の知る限りでは)広く使用されていませんが、まだ活発に開発されている可能性があるためです。

スキーマの例:

{
  "$schema": "http://json-schema.org/schema#",
  "title": "Product",
  "type": "object",
  "required": ["id", "name", "price"],
  "properties": {
    "id": {
      "type": "number",
      "description": "Product identifier"
    },
    "name": {
      "type": "string",
      "description": "Name of the product"
    },
    "price": {
      "type": "number",
      "minimum": 0
    },
    "tags": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "stock": {
      "type": "object",
      "properties": {
        "warehouse": {
          "type": "number"
        },
        "retail": {
          "type": "number"
        }
      }
    }
  }
}

このサンプルJSONを検証します:

{
  "id": 1,
  "name": "Foo",
  "price": 123,
  "tags": [
    "Bar",
    "Eek"
  ],
  "stock": {
    "warehouse": 300,
    "retail": 20
  }
}

[〜#〜] edit [〜#〜]これらはすべて(多かれ少なかれ)同じことを行い、構文が非常に似ているため、パフォーマンスは次のようになります。最大の懸念の。 JSONバリデーターのパフォーマンスの比較については here を参照してください-勝者は ajv であり、これは私がこの理由で個人的に使用しているものです。

5
Nick Bull