Mein JSON-Datenmodell verfügt über ein Objekt mit einer Reihe von Eigenschaften, von denen nur eine oder keine vorhanden sein kann, sowie andere Eigenschaften mit eigenen Einschränkungen. Gibt es eine Möglichkeit, dies ohne Wiederholung wie in this example zu tun?1 oder kein Satz von Eigenschaften im JSON-Schema
Unten ist ein einfaches Beispiel von so nah wie ich dies mit Node.js + ajv erreicht haben.
var Ajv = require('ajv'),
ajv = new Ajv();
var schema = {
type: 'object',
properties: {
id: {type: 'string'},
a: {type: 'integer'},
b: {type: 'integer'}
},
required: ['id'],
oneOf: [
{required: ['a']},
{required: ['b']}
],
additionalProperties: false
};
// invalid
var json1 = {
id: 'someID',
a: 1,
b: 3
};
// valid
var json2 = {
id: 'someID',
b: 3
};
// valid
var json3 = {
id: 'someID',
a: 1
};
// valid
var json4 = {
id: 'someID'
};
var validate = ajv.compile(schema);
console.log(validate(json1)); // false
console.log(validate(json2)); // true
console.log(validate(json3)); // true
console.log(validate(json4)); // false
Danke Jason. Das Verwenden von Abhängigkeiten ist das, was ich benötigt habe, wie in Ihrem zweiten Beispiel, aber ohne die Verwendung von erforderlich. z.B. "a": {"nicht": ["b"]}, "b": {"not": ["a"]} – Severin
Tatsächlich funktionierte das nicht, da der Wert eines Schlüsselwortes kein Objekt sein muss. Wie kann ich sagen, mit Abhängigkeiten, "wenn 'a' vorhanden ist, kann 'b' nicht vorhanden sein und umgekehrt" – Severin
Ich bin mir nicht sicher, was Sie versuchen zu lösen. Beide Schemata, die ich gegeben habe, funktionieren korrekt wie angegeben. Ich brauche mehr Informationen darüber, was genau für dich nicht funktioniert. – Jason