2017-05-10 10 views
0

Iは次のようにJSONオブジェクトを検証するスキーマを思い付くしようとしていた:JSONスキーマが特定のプロパティを含むプロパティを1つだけ検証できますか?

{ 
"id":"some_id", 
"properties":{ 
    "A":{ 
    "name":"a", 
    "isindex":true 
    }, 
    "B":{ 
    "name":"b" 
    }, 
    "C":{ 
    "name":"c" 
    } 
} 
} 

契約である:

  1. 特性A、B、Cは、予め知られておらず、いずれであってもよいです文字列。
  2. プロパティ(A、B、C ...)のうち唯一のプロパティは、その値に "isindex":プロパティがインデックスとして使用されることを示す真のキーと値のペアを持ちます。つまり、以下は無効です。

{ 
    "id":"some_id", 
    "properties":{ 
    "A":{ 
     "type":"string", 
     "isindex":true 
    }, 
    "B":{ 
    "type":"string" 
    }, 
    "C":{ 
     "type":"array", 
     "isindex":true 
    } 
    } 
} 

実際、JSONスキーマがこのための正しいツールであるかどうかはわかりません。

ご協力ありがとうございます。

+0

あなたがここに求めているかを確認するのは難しいです。あなたは少し拡大できますか? –

+0

@TravisJ私はタイプミスを見つけて修正しました(1つだけの1つ - > 1つだけ)。それはあなたを混乱させるかもしれません。申し訳ありません。もう少し文脈が役立つかもしれません。私の質問で検証されるオブジェクトは、型定義を記述します。型にはいくつかの属性(A、B、C、...)があり、属性のうちの1つだけがその型のオブジェクトの一意のid(インデックス)として使用されるべきです。 JSONスキーマを使用して、そのようなことを確認したかったのです。 – AaronT

答えて

1

JSONスキーマは、この種のツールには適していますが、処理できない特定のケースがあります。少なくとも1つは特定のスキーマにマッチすると主張できますが、1つだけがマッチすると主張することはできません。

あなたができる最善のことは、あなたのデータ構造は、このようなものに変更され...

{ 
    "id":"some_id", 
    "properties":{ 
    "A":{ 
     "name":"a" 
    }, 
    "B":{ 
     "name":"b" 
    }, 
    "C":{ 
     "name":"c" 
    } 
    }, 
    "index": "A" 
} 
+0

少なくとも1つは特定のスキーマにマッチすると主張することはできますが、1つしかマッチしないと主張することはできません。私は私の質問に答えたと思う。ありがとう! – AaronT

関連する問題