Json 在父节点的allOf if then条件中引用子节点
因此,需要在Json模式中插入IF-then条件和以下条件Json 在父节点的allOf if then条件中引用子节点,json,jsonschema,Json,Jsonschema,因此,需要在Json模式中插入IF-then条件和以下条件 如果LandMark1=USA,FlatNo=Excalibur 然后需要一个扇区 我不知道我应该把这个条件和它的语法放在哪里 我尝试在if-then-conditions-in-allOf中详细使用$ref作为地址和地标的父对象 但即使这样也不起作用,因为它无法找出参考 任何帮助都是非常明显的您需要使用关键字来描述这一点。最难的部分是if模式 您需要定义一个if模式,当给定满足条件的实例时,该模式将验证为true。单独开发此模式,然后
任何帮助都是非常明显的您需要使用
关键字来描述这一点。最难的部分是if
模式
您需要定义一个if
模式,当给定满足条件的实例时,该模式将验证为true。单独开发此模式,然后将其添加到完整模式中,这会有所帮助
{
"$schema":"https://json-schema.org/draft/2019-09/schema",
"$id":"PersonalDetails.json",
"type":"object",
"properties":{
"Header":{
"type":"object",
"properties":{
"HeaderName":{
"type":"string"
},
"HeaderValue":{
"type":"string"
}
}
},
"Details":{
"type":"array",
"items":{
"type":"object",
"properties":{
"FName":{
"type":"string"
},
"LName":{
"type":"string"
},
"Address":{
"type":"object",
"properties":{
"FlatNo":{
"type":"string"
},
"Sector":{
"type":"string"
},
"LandMarks":{
"type":"object",
"properties":{
"LandMark1":{
"type":"string"
},
"LandMark2":{
"type":"string"
}
}
}
},
"required":[
"Sector"
]
}
}
}
}
}
}
{
"Header":{
"HeaderName":"DummyName",
"HeaderValue":"DummyName"
},
"Details":[
{
"FName":"Chicago",
"LName":"Laos",
"Address":{
"FlatNo":"Excalibur",
"Sector":"07",
"LandMarks":{
"LandMark1":"USA",
"LandMark2":"UK"
}
}
}
]
}
以下实例将通过对该架构的验证。如果FlatNo!=神剑或地标1!=美国
{
"type": "object",
"properties": {
"FlatNo": { "const": "Excalibur" },
"LandMarks": {
"type": "object",
"properties": {
"LandMark1": { "const": "USA" }
},
"required": ["LandMark1"]
}
},
"required": ["LandMarks", "FlatNo"]
}
现在,将应用于地址模式应该很简单
{
"FlatNo":"Excalibur",
"Sector":"07",
"LandMarks":{
"LandMark1":"USA",
"LandMark2":"UK"
}
}
对象地标
应具有属性
。如果您能展示您在$ref
方面所做的尝试,那就太好了,因为这样我们就可以帮助解决问题。您好,对不起,我想我错过了刚才添加的if-then条件的所有详细属性。如果你还想我可以更新,没问题。我建议更新你的问题内容。是的,请更新以显示您到目前为止尝试的内容,我可能会提供帮助=]嗨,我已经更新了json模式,我没有进行我尝试的更新,因为这是不正确的。因此,如果你能从一些新的方法开始,那将更好地感谢Jason的意见。根据当前情况,对于以下条件,我们可以使用if/then:-如果LandMark1=“USA”和Sector=“07”,则需要使用LandMark2,但我可以将其放置在LandMarks模式中,而不是将其放置在address schema中吗?JSON模式无法查找JSON树。因此,您需要将放置在足够高的位置,以便它可以“查看”需要设置约束的所有元素。如果它在“Landmarks”模式中,If
将无法设置“Sector=07”约束。我试图将if-else条件置于地址级别,但它仍然不起作用。我怀疑语法可能是错误的。因此,如果您可以共享我需要在地址级别设置的if-then条件,这将非常有用。注释不是共享模式的好地方。我认为对我来说,最好的帮助方式是,如果你提出一个新问题,然后发表你已经尝试过但不适合你的东西。嗨,杰森。上传了一个新问题,请帮助我。
"if": { ... schema from above ... },
"then": { "required": ["Sector"] }