Loading...
Loading...
Migrates JSON Schemas between draft versions for use with z-schema. Use when the user wants to upgrade schemas from draft-04 to draft-2020-12, convert between draft formats, update deprecated keywords, replace id with $id, convert definitions to $defs, migrate items to prefixItems, replace dependencies with dependentRequired or dependentSchemas, adopt unevaluatedProperties or unevaluatedItems, or adapt schemas to newer JSON Schema features.
npx skill4agent add zaggino/z-schema migrating-json-schemas$schemaid$idimport ZSchema from 'z-schema';
const validator = ZSchema.create({ version: 'draft2020-12' });validator.validateSchema(schema)| Old keyword (draft-04) | New keyword (draft-2020-12) | Introduced in |
|---|---|---|
| | draft-06 |
| | draft-2019-09 |
Array-form | | draft-2020-12 |
| | draft-2020-12 |
| | draft-06 |
| | draft-06 |
| | draft-2019-09 |
| | draft-2019-09 |
| | draft-2020-12 |
id$id// Before (draft-04)
{ "id": "http://example.com/person.json", "type": "object" }
// After (draft-2020-12)
{ "$id": "http://example.com/person.json", "type": "object" }exclusiveMinimumexclusiveMaximum// Before (draft-04)
{ "type": "number", "minimum": 0, "exclusiveMinimum": true }
// After (draft-2020-12)
{ "type": "number", "exclusiveMinimum": 0 }minimumexclusiveMinimumexclusiveMinimum: 0definitions$defs// Before
{ "definitions": { "address": { "type": "object" } } }
// After
{ "$defs": { "address": { "type": "object" } } }$ref#/definitions/...#/$defs/...dependencies// Before (draft-04) — mixed dependencies
{
"dependencies": {
"billing_address": ["credit_card"],
"credit_card": { "type": "object", "properties": { "cvv": { "type": "string" } } }
}
}
// After (draft-2020-12) — split into two keywords
{
"dependentRequired": {
"billing_address": ["credit_card"]
},
"dependentSchemas": {
"credit_card": { "type": "object", "properties": { "cvv": { "type": "string" } } }
}
}itemsprefixItems// Before (draft-04)
{
"type": "array",
"items": [{ "type": "string" }, { "type": "number" }],
"additionalItems": false
}
// After (draft-2020-12)
{
"type": "array",
"prefixItems": [{ "type": "string" }, { "type": "number" }],
"items": false
}itemsprefixItemsadditionalItemsitems$schema{ "$schema": "https://json-schema.org/draft/2020-12/schema" }definitions$defs$refitemsprefixItemsadditionalItemsitemsprefixItemsdependenciesdependentRequireddependentSchemasunevaluatedPropertiesunevaluatedItemsitemsprefixItemsadditionalItemsitems$recursiveRef$recursiveAnchor$dynamicRef$dynamicAnchorimport ZSchema from 'z-schema';
const validator = ZSchema.create({ version: 'draft2020-12' });
try {
validator.validateSchema(migratedSchema);
console.log('Schema is valid for draft-2020-12');
} catch (err) {
console.log('Schema issues:', err.details);
}// Test with known-good data
validator.validate(knownGoodData, migratedSchema);
// Test with known-bad data
const { valid } = validator.validateSafe(knownBadData, migratedSchema);
if (valid) {
console.warn('Migration issue: previously invalid data now passes');
}version: 'none'$schemaconst validator = ZSchema.create({ version: 'none' });