web-dev-qa-db-ja.com

オブジェクトの配列のJSONスキーマ定義

私はこれを見ました 他の質問 が、それはまったく同じではなく、私の問題はより単純であるが、機能していないように感じます。

私のデータは次のようになります。

[
    { "loc": "a value 1", "toll" : null, "message" : "message is sometimes null"},
    { "loc": "a value 2", "toll" : "toll is sometimes null", "message" : null}
]

Node.jsプロジェクトのJSON検証に [〜#〜] ajv [〜#〜] を使用したいので、いくつか試してみましたスキーマを使用してデータを記述しようとしますが、常にこれをエラーとして取得します:

[ { keyword: 'type',
    dataPath: '',
    schemaPath: '#/type',
    params: { type: 'array' },
    message: 'should be array' } ]

私が試したスキーマは次のようになります。

{
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "loc": {
        "type": "string"
      },
      "toll": {
        "type": "string"
      },
      "message": {
        "type": "string"
      }
    },
    "required": [
      "loc"
    ]
  }
}

また、 このオンラインツール を使用してスキーマを生成しようとしましたが、これも機能せず、正しい結果が出力されることを確認しました。私はその出力を jsonschemavalidator.net に対して検証しようとしましたが、それは私にも同様のエラーを与えます:

Found 1 error(s)
 Message:
 Invalid type. Expected Array but got Object.
 Schema path:
 #/type
20
Kyle Falconer

検証するデータと一致しないことを除き、スキーマを正しく定義しました。スキーマに一致するようにプロパティ名を変更しても、まだ1つの問題があります。 「toll」と「message」をnullにしたい場合は、次のことができます。

{
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "loc": {
        "type": "string"
      },
      "toll": {
        "type": ["string", "null"]
      },
      "message": {
        "type": ["string", "null"]
      }
    },
    "required": [
      "loc"
    ]
  }
}

ただし、これは表示されるエラーメッセージとは関係ありません。そのメッセージは、検証しているデータが配列ではないことを意味します。投稿したサンプルデータは、このエラーになりません。質問に投稿されたもの以外のデータでバリデーターを実行していますか?

40