例如,我有一個JSON模式看起來如下:如何判斷JSON模式是否與Java中的另一個兼容?
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"billing_address": { "$ref": "#/definitions/address" },
"shipping_address": { "$ref": "#/definitions/address" }
}
"definitions": {
"address": {
"type": "object",
"properties": {
"street_address": { "type": "string" },
"city": { "type": "string" },
"state": { "type": "string" }
},
"required": ["street_address", "city", "state"]
}
}
}
這個模式表示一個對象有兩個vairable billing_address和shipping_address,兩者都是類型地址,其中包含三個屬性:street_address,city and state。
現在,我有另外一個「大」的模式:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"billing_address": { "$ref": "#/definitions/address" },
"shipping_address": { "$ref": "#/definitions/address" },
"new_address": { "$ref": "#/definitions/address" }
}
"definitions": {
"address": {
"type": "object",
"properties": {
"street_address": { "type": "string" },
"city": { "type": "string" },
"state": { "type": "string" },
"zip_code": { "type": "string" }
},
"required": ["street_address", "city", "state"]
}
}
}
正如你可以看到,我添加了一個新的屬性NEW_ADDRESS進入模式,並在地址有一個叫ZIP_CODE新特性,這是不是必需的屬性。
所以如果我從舊的JSON模式創建一個對象,它也應該可用於新的JSON模式。在這種情況下,我們將調用新的模式與舊模式兼容。 (換句話說,新的模式是舊模式的擴展,但沒有修改。)
問題是如何判斷模式是否與Java中的另一個兼容?還應該注意複雜的情況,例如數字字段的「最小」屬性。
JSON是免費模式。你將不得不實現你自己的json驗證器。但這不是很好... – dit