[{"data":1,"prerenderedAt":2842},["ShallowReactive",2],{"guide-json-schema-validation":3},{"id":4,"title":5,"body":6,"date":2834,"description":2835,"extension":2836,"meta":2837,"navigation":2306,"path":2838,"readingTime":661,"seo":2839,"stem":2840,"__hash__":2841},"guides\u002Fguides\u002Fjson-schema-validation.md","JSON Schema Validation: A Practical Guide",{"type":7,"value":8,"toc":2801},"minimark",[9,14,18,21,37,40,44,47,194,200,230,234,237,322,327,396,454,458,537,546,550,561,741,746,768,772,778,835,838,899,903,907,1129,1133,1252,1259,1340,1344,1348,1351,1415,1426,1430,1433,1477,1481,1484,1640,1657,1661,1667,1671,1809,1813,1866,1870,1873,2219,2223,2233,2237,2259,2263,2522,2526,2534,2538,2719,2723,2786,2790,2797],[10,11,13],"h2",{"id":12},"what-is-json-schema","What is JSON Schema?",[15,16,17],"p",{},"JSON Schema is a vocabulary that allows you to annotate and validate JSON documents. It provides a contract for your JSON data — defining what structure is expected, what types are allowed, and what constraints must be met. Think of it as a TypeScript interface for your JSON data, but one that can be validated at runtime.",[15,19,20],{},"JSON Schema is particularly valuable when:",[22,23,24,28,31,34],"ul",{},[25,26,27],"li",{},"Building APIs that accept JSON payloads",[25,29,30],{},"Validating configuration files",[25,32,33],{},"Ensuring data integrity in databases",[25,35,36],{},"Providing documentation for expected data structures",[15,38,39],{},"The current stable version is Draft 2020-12, but you'll also encounter Draft-07 and Draft-04 in the wild.",[10,41,43],{"id":42},"basic-schema-structure","Basic Schema Structure",[15,45,46],{},"A JSON Schema document is itself a JSON document with a specific structure:",[48,49,54],"pre",{"className":50,"code":51,"language":52,"meta":53,"style":53},"language-json shiki shiki-themes github-light github-dark","{\n  \"$schema\": \"https:\u002F\u002Fjson-schema.org\u002Fdraft\u002F2020-12\u002Fschema\",\n  \"$id\": \"https:\u002F\u002Fexample.com\u002Fschemas\u002Fproduct.json\",\n  \"title\": \"Product\",\n  \"description\": \"A product in the catalog\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"name\": { \"type\": \"string\" },\n    \"price\": { \"type\": \"number\" }\n  }\n}\n","json","",[55,56,57,66,83,96,109,122,135,144,164,182,188],"code",{"__ignoreMap":53},[58,59,62],"span",{"class":60,"line":61},"line",1,[58,63,65],{"class":64},"sVt8B","{\n",[58,67,69,73,76,80],{"class":60,"line":68},2,[58,70,72],{"class":71},"sj4cs","  \"$schema\"",[58,74,75],{"class":64},": ",[58,77,79],{"class":78},"sZZnC","\"https:\u002F\u002Fjson-schema.org\u002Fdraft\u002F2020-12\u002Fschema\"",[58,81,82],{"class":64},",\n",[58,84,86,89,91,94],{"class":60,"line":85},3,[58,87,88],{"class":71},"  \"$id\"",[58,90,75],{"class":64},[58,92,93],{"class":78},"\"https:\u002F\u002Fexample.com\u002Fschemas\u002Fproduct.json\"",[58,95,82],{"class":64},[58,97,99,102,104,107],{"class":60,"line":98},4,[58,100,101],{"class":71},"  \"title\"",[58,103,75],{"class":64},[58,105,106],{"class":78},"\"Product\"",[58,108,82],{"class":64},[58,110,112,115,117,120],{"class":60,"line":111},5,[58,113,114],{"class":71},"  \"description\"",[58,116,75],{"class":64},[58,118,119],{"class":78},"\"A product in the catalog\"",[58,121,82],{"class":64},[58,123,125,128,130,133],{"class":60,"line":124},6,[58,126,127],{"class":71},"  \"type\"",[58,129,75],{"class":64},[58,131,132],{"class":78},"\"object\"",[58,134,82],{"class":64},[58,136,138,141],{"class":60,"line":137},7,[58,139,140],{"class":71},"  \"properties\"",[58,142,143],{"class":64},": {\n",[58,145,147,150,153,156,158,161],{"class":60,"line":146},8,[58,148,149],{"class":71},"    \"name\"",[58,151,152],{"class":64},": { ",[58,154,155],{"class":71},"\"type\"",[58,157,75],{"class":64},[58,159,160],{"class":78},"\"string\"",[58,162,163],{"class":64}," },\n",[58,165,167,170,172,174,176,179],{"class":60,"line":166},9,[58,168,169],{"class":71},"    \"price\"",[58,171,152],{"class":64},[58,173,155],{"class":71},[58,175,75],{"class":64},[58,177,178],{"class":78},"\"number\"",[58,180,181],{"class":64}," }\n",[58,183,185],{"class":60,"line":184},10,[58,186,187],{"class":64},"  }\n",[58,189,191],{"class":60,"line":190},11,[58,192,193],{"class":64},"}\n",[15,195,196],{},[197,198,199],"strong",{},"Key fields:",[22,201,202,208,214,224],{},[25,203,204,207],{},[55,205,206],{},"$schema",": Identifies which version of JSON Schema to use",[25,209,210,213],{},[55,211,212],{},"$id",": A unique identifier for this schema (often a URL)",[25,215,216,219,220,223],{},[55,217,218],{},"title"," and ",[55,221,222],{},"description",": Human-readable documentation",[25,225,226,229],{},[55,227,228],{},"type",": The data type (string, number, integer, object, array, boolean, null)",[10,231,233],{"id":232},"type-validation","Type Validation",[15,235,236],{},"JSON Schema supports these basic types:",[48,238,240],{"className":50,"code":239,"language":52,"meta":53,"style":53},"{\n  \"type\": \"string\",\n  \"type\": \"number\",\n  \"type\": \"integer\",\n  \"type\": \"boolean\",\n  \"type\": \"object\",\n  \"type\": \"array\",\n  \"type\": \"null\"\n}\n",[55,241,242,246,256,266,277,288,298,309,318],{"__ignoreMap":53},[58,243,244],{"class":60,"line":61},[58,245,65],{"class":64},[58,247,248,250,252,254],{"class":60,"line":68},[58,249,127],{"class":71},[58,251,75],{"class":64},[58,253,160],{"class":78},[58,255,82],{"class":64},[58,257,258,260,262,264],{"class":60,"line":85},[58,259,127],{"class":71},[58,261,75],{"class":64},[58,263,178],{"class":78},[58,265,82],{"class":64},[58,267,268,270,272,275],{"class":60,"line":98},[58,269,127],{"class":71},[58,271,75],{"class":64},[58,273,274],{"class":78},"\"integer\"",[58,276,82],{"class":64},[58,278,279,281,283,286],{"class":60,"line":111},[58,280,127],{"class":71},[58,282,75],{"class":64},[58,284,285],{"class":78},"\"boolean\"",[58,287,82],{"class":64},[58,289,290,292,294,296],{"class":60,"line":124},[58,291,127],{"class":71},[58,293,75],{"class":64},[58,295,132],{"class":78},[58,297,82],{"class":64},[58,299,300,302,304,307],{"class":60,"line":137},[58,301,127],{"class":71},[58,303,75],{"class":64},[58,305,306],{"class":78},"\"array\"",[58,308,82],{"class":64},[58,310,311,313,315],{"class":60,"line":146},[58,312,127],{"class":71},[58,314,75],{"class":64},[58,316,317],{"class":78},"\"null\"\n",[58,319,320],{"class":60,"line":166},[58,321,193],{"class":64},[323,324,326],"h3",{"id":325},"string-validation","String Validation",[48,328,330],{"className":50,"code":329,"language":52,"meta":53,"style":53},"{\n  \"type\": \"string\",\n  \"minLength\": 3,\n  \"maxLength\": 50,\n  \"pattern\": \"^[A-Za-z ]+$\",\n  \"format\": \"email\"\n}\n",[55,331,332,336,346,358,370,382,392],{"__ignoreMap":53},[58,333,334],{"class":60,"line":61},[58,335,65],{"class":64},[58,337,338,340,342,344],{"class":60,"line":68},[58,339,127],{"class":71},[58,341,75],{"class":64},[58,343,160],{"class":78},[58,345,82],{"class":64},[58,347,348,351,353,356],{"class":60,"line":85},[58,349,350],{"class":71},"  \"minLength\"",[58,352,75],{"class":64},[58,354,355],{"class":71},"3",[58,357,82],{"class":64},[58,359,360,363,365,368],{"class":60,"line":98},[58,361,362],{"class":71},"  \"maxLength\"",[58,364,75],{"class":64},[58,366,367],{"class":71},"50",[58,369,82],{"class":64},[58,371,372,375,377,380],{"class":60,"line":111},[58,373,374],{"class":71},"  \"pattern\"",[58,376,75],{"class":64},[58,378,379],{"class":78},"\"^[A-Za-z ]+$\"",[58,381,82],{"class":64},[58,383,384,387,389],{"class":60,"line":124},[58,385,386],{"class":71},"  \"format\"",[58,388,75],{"class":64},[58,390,391],{"class":78},"\"email\"\n",[58,393,394],{"class":60,"line":137},[58,395,193],{"class":64},[15,397,398,401,402,405,406,405,409,405,412,405,415,405,418,405,421,405,424,405,427,405,430,405,433,405,436,405,439,405,442,405,445,405,448,405,451],{},[197,399,400],{},"Built-in formats:"," ",[55,403,404],{},"date-time",", ",[55,407,408],{},"date",[55,410,411],{},"time",[55,413,414],{},"email",[55,416,417],{},"idn-email",[55,419,420],{},"hostname",[55,422,423],{},"idn-hostname",[55,425,426],{},"ipv4",[55,428,429],{},"ipv6",[55,431,432],{},"uri",[55,434,435],{},"uri-reference",[55,437,438],{},"iri",[55,440,441],{},"iri-reference",[55,443,444],{},"uri-template",[55,446,447],{},"json-pointer",[55,449,450],{},"relative-json-pointer",[55,452,453],{},"regex",[323,455,457],{"id":456},"number-and-integer-validation","Number and Integer Validation",[48,459,461],{"className":50,"code":460,"language":52,"meta":53,"style":53},"{\n  \"type\": \"number\",\n  \"minimum\": 0,\n  \"maximum\": 100,\n  \"exclusiveMinimum\": 0,\n  \"exclusiveMaximum\": 100,\n  \"multipleOf\": 5\n}\n",[55,462,463,467,477,489,501,512,523,533],{"__ignoreMap":53},[58,464,465],{"class":60,"line":61},[58,466,65],{"class":64},[58,468,469,471,473,475],{"class":60,"line":68},[58,470,127],{"class":71},[58,472,75],{"class":64},[58,474,178],{"class":78},[58,476,82],{"class":64},[58,478,479,482,484,487],{"class":60,"line":85},[58,480,481],{"class":71},"  \"minimum\"",[58,483,75],{"class":64},[58,485,486],{"class":71},"0",[58,488,82],{"class":64},[58,490,491,494,496,499],{"class":60,"line":98},[58,492,493],{"class":71},"  \"maximum\"",[58,495,75],{"class":64},[58,497,498],{"class":71},"100",[58,500,82],{"class":64},[58,502,503,506,508,510],{"class":60,"line":111},[58,504,505],{"class":71},"  \"exclusiveMinimum\"",[58,507,75],{"class":64},[58,509,486],{"class":71},[58,511,82],{"class":64},[58,513,514,517,519,521],{"class":60,"line":124},[58,515,516],{"class":71},"  \"exclusiveMaximum\"",[58,518,75],{"class":64},[58,520,498],{"class":71},[58,522,82],{"class":64},[58,524,525,528,530],{"class":60,"line":137},[58,526,527],{"class":71},"  \"multipleOf\"",[58,529,75],{"class":64},[58,531,532],{"class":71},"5\n",[58,534,535],{"class":60,"line":146},[58,536,193],{"class":64},[15,538,539,401,542,545],{},[197,540,541],{},"Note:",[55,543,544],{},"integer"," is a separate type that only accepts whole numbers.",[10,547,549],{"id":548},"object-properties-and-required-fields","Object Properties and Required Fields",[15,551,552,553,556,557,560],{},"The ",[55,554,555],{},"properties"," keyword defines what keys are allowed in an object, and ",[55,558,559],{},"required"," specifies which ones must be present.",[48,562,564],{"className":50,"code":563,"language":52,"meta":53,"style":53},"{\n  \"type\": \"object\",\n  \"properties\": {\n    \"username\": {\n      \"type\": \"string\",\n      \"minLength\": 3,\n      \"maxLength\": 20,\n      \"pattern\": \"^[a-zA-Z0-9_]+$\"\n    },\n    \"email\": {\n      \"type\": \"string\",\n      \"format\": \"email\"\n    },\n    \"age\": {\n      \"type\": \"integer\",\n      \"minimum\": 18\n    }\n  },\n  \"required\": [\"username\", \"email\"]\n}\n",[55,565,566,570,580,586,593,604,615,627,637,642,649,659,669,674,682,693,704,710,716,736],{"__ignoreMap":53},[58,567,568],{"class":60,"line":61},[58,569,65],{"class":64},[58,571,572,574,576,578],{"class":60,"line":68},[58,573,127],{"class":71},[58,575,75],{"class":64},[58,577,132],{"class":78},[58,579,82],{"class":64},[58,581,582,584],{"class":60,"line":85},[58,583,140],{"class":71},[58,585,143],{"class":64},[58,587,588,591],{"class":60,"line":98},[58,589,590],{"class":71},"    \"username\"",[58,592,143],{"class":64},[58,594,595,598,600,602],{"class":60,"line":111},[58,596,597],{"class":71},"      \"type\"",[58,599,75],{"class":64},[58,601,160],{"class":78},[58,603,82],{"class":64},[58,605,606,609,611,613],{"class":60,"line":124},[58,607,608],{"class":71},"      \"minLength\"",[58,610,75],{"class":64},[58,612,355],{"class":71},[58,614,82],{"class":64},[58,616,617,620,622,625],{"class":60,"line":137},[58,618,619],{"class":71},"      \"maxLength\"",[58,621,75],{"class":64},[58,623,624],{"class":71},"20",[58,626,82],{"class":64},[58,628,629,632,634],{"class":60,"line":146},[58,630,631],{"class":71},"      \"pattern\"",[58,633,75],{"class":64},[58,635,636],{"class":78},"\"^[a-zA-Z0-9_]+$\"\n",[58,638,639],{"class":60,"line":166},[58,640,641],{"class":64},"    },\n",[58,643,644,647],{"class":60,"line":184},[58,645,646],{"class":71},"    \"email\"",[58,648,143],{"class":64},[58,650,651,653,655,657],{"class":60,"line":190},[58,652,597],{"class":71},[58,654,75],{"class":64},[58,656,160],{"class":78},[58,658,82],{"class":64},[58,660,662,665,667],{"class":60,"line":661},12,[58,663,664],{"class":71},"      \"format\"",[58,666,75],{"class":64},[58,668,391],{"class":78},[58,670,672],{"class":60,"line":671},13,[58,673,641],{"class":64},[58,675,677,680],{"class":60,"line":676},14,[58,678,679],{"class":71},"    \"age\"",[58,681,143],{"class":64},[58,683,685,687,689,691],{"class":60,"line":684},15,[58,686,597],{"class":71},[58,688,75],{"class":64},[58,690,274],{"class":78},[58,692,82],{"class":64},[58,694,696,699,701],{"class":60,"line":695},16,[58,697,698],{"class":71},"      \"minimum\"",[58,700,75],{"class":64},[58,702,703],{"class":71},"18\n",[58,705,707],{"class":60,"line":706},17,[58,708,709],{"class":64},"    }\n",[58,711,713],{"class":60,"line":712},18,[58,714,715],{"class":64},"  },\n",[58,717,719,722,725,728,730,733],{"class":60,"line":718},19,[58,720,721],{"class":71},"  \"required\"",[58,723,724],{"class":64},": [",[58,726,727],{"class":78},"\"username\"",[58,729,405],{"class":64},[58,731,732],{"class":78},"\"email\"",[58,734,735],{"class":64},"]\n",[58,737,739],{"class":60,"line":738},20,[58,740,193],{"class":64},[15,742,743],{},[197,744,745],{},"This schema means:",[22,747,748,756,762],{},[25,749,750,219,753,755],{},[55,751,752],{},"username",[55,754,414],{}," MUST be present",[25,757,758,761],{},[55,759,760],{},"age"," is optional",[25,763,764,765,767],{},"If ",[55,766,760],{}," is present, it must be an integer >= 18",[323,769,771],{"id":770},"additional-properties","Additional Properties",[15,773,774,775,777],{},"By default, JSON Schema allows additional properties not mentioned in ",[55,776,555],{},". To restrict this:",[48,779,781],{"className":50,"code":780,"language":52,"meta":53,"style":53},"{\n  \"type\": \"object\",\n  \"properties\": {\n    \"name\": { \"type\": \"string\" }\n  },\n  \"additionalProperties\": false\n}\n",[55,782,783,787,797,803,817,821,831],{"__ignoreMap":53},[58,784,785],{"class":60,"line":61},[58,786,65],{"class":64},[58,788,789,791,793,795],{"class":60,"line":68},[58,790,127],{"class":71},[58,792,75],{"class":64},[58,794,132],{"class":78},[58,796,82],{"class":64},[58,798,799,801],{"class":60,"line":85},[58,800,140],{"class":71},[58,802,143],{"class":64},[58,804,805,807,809,811,813,815],{"class":60,"line":98},[58,806,149],{"class":71},[58,808,152],{"class":64},[58,810,155],{"class":71},[58,812,75],{"class":64},[58,814,160],{"class":78},[58,816,181],{"class":64},[58,818,819],{"class":60,"line":111},[58,820,715],{"class":64},[58,822,823,826,828],{"class":60,"line":124},[58,824,825],{"class":71},"  \"additionalProperties\"",[58,827,75],{"class":64},[58,829,830],{"class":71},"false\n",[58,832,833],{"class":60,"line":137},[58,834,193],{"class":64},[15,836,837],{},"Or specify a schema for additional properties:",[48,839,841],{"className":50,"code":840,"language":52,"meta":53,"style":53},"{\n  \"type\": \"object\",\n  \"properties\": {\n    \"name\": { \"type\": \"string\" }\n  },\n  \"additionalProperties\": { \"type\": \"string\" }\n}\n",[55,842,843,847,857,863,877,881,895],{"__ignoreMap":53},[58,844,845],{"class":60,"line":61},[58,846,65],{"class":64},[58,848,849,851,853,855],{"class":60,"line":68},[58,850,127],{"class":71},[58,852,75],{"class":64},[58,854,132],{"class":78},[58,856,82],{"class":64},[58,858,859,861],{"class":60,"line":85},[58,860,140],{"class":71},[58,862,143],{"class":64},[58,864,865,867,869,871,873,875],{"class":60,"line":98},[58,866,149],{"class":71},[58,868,152],{"class":64},[58,870,155],{"class":71},[58,872,75],{"class":64},[58,874,160],{"class":78},[58,876,181],{"class":64},[58,878,879],{"class":60,"line":111},[58,880,715],{"class":64},[58,882,883,885,887,889,891,893],{"class":60,"line":124},[58,884,825],{"class":71},[58,886,152],{"class":64},[58,888,155],{"class":71},[58,890,75],{"class":64},[58,892,160],{"class":78},[58,894,181],{"class":64},[58,896,897],{"class":60,"line":137},[58,898,193],{"class":64},[10,900,902],{"id":901},"nested-objects-and-arrays","Nested Objects and Arrays",[323,904,906],{"id":905},"nested-objects","Nested Objects",[48,908,910],{"className":50,"code":909,"language":52,"meta":53,"style":53},"{\n  \"type\": \"object\",\n  \"properties\": {\n    \"user\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"firstName\": { \"type\": \"string\" },\n        \"lastName\": { \"type\": \"string\" },\n        \"address\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"street\": { \"type\": \"string\" },\n            \"city\": { \"type\": \"string\" },\n            \"zipCode\": { \"type\": \"string\", \"pattern\": \"^[0-9]{5}$\" }\n          },\n          \"required\": [\"street\", \"city\"]\n        }\n      },\n      \"required\": [\"firstName\", \"lastName\"]\n    }\n  }\n}\n",[55,911,912,916,926,932,939,949,956,971,986,993,1004,1011,1026,1041,1066,1071,1088,1093,1098,1115,1119,1124],{"__ignoreMap":53},[58,913,914],{"class":60,"line":61},[58,915,65],{"class":64},[58,917,918,920,922,924],{"class":60,"line":68},[58,919,127],{"class":71},[58,921,75],{"class":64},[58,923,132],{"class":78},[58,925,82],{"class":64},[58,927,928,930],{"class":60,"line":85},[58,929,140],{"class":71},[58,931,143],{"class":64},[58,933,934,937],{"class":60,"line":98},[58,935,936],{"class":71},"    \"user\"",[58,938,143],{"class":64},[58,940,941,943,945,947],{"class":60,"line":111},[58,942,597],{"class":71},[58,944,75],{"class":64},[58,946,132],{"class":78},[58,948,82],{"class":64},[58,950,951,954],{"class":60,"line":124},[58,952,953],{"class":71},"      \"properties\"",[58,955,143],{"class":64},[58,957,958,961,963,965,967,969],{"class":60,"line":137},[58,959,960],{"class":71},"        \"firstName\"",[58,962,152],{"class":64},[58,964,155],{"class":71},[58,966,75],{"class":64},[58,968,160],{"class":78},[58,970,163],{"class":64},[58,972,973,976,978,980,982,984],{"class":60,"line":146},[58,974,975],{"class":71},"        \"lastName\"",[58,977,152],{"class":64},[58,979,155],{"class":71},[58,981,75],{"class":64},[58,983,160],{"class":78},[58,985,163],{"class":64},[58,987,988,991],{"class":60,"line":166},[58,989,990],{"class":71},"        \"address\"",[58,992,143],{"class":64},[58,994,995,998,1000,1002],{"class":60,"line":184},[58,996,997],{"class":71},"          \"type\"",[58,999,75],{"class":64},[58,1001,132],{"class":78},[58,1003,82],{"class":64},[58,1005,1006,1009],{"class":60,"line":190},[58,1007,1008],{"class":71},"          \"properties\"",[58,1010,143],{"class":64},[58,1012,1013,1016,1018,1020,1022,1024],{"class":60,"line":661},[58,1014,1015],{"class":71},"            \"street\"",[58,1017,152],{"class":64},[58,1019,155],{"class":71},[58,1021,75],{"class":64},[58,1023,160],{"class":78},[58,1025,163],{"class":64},[58,1027,1028,1031,1033,1035,1037,1039],{"class":60,"line":671},[58,1029,1030],{"class":71},"            \"city\"",[58,1032,152],{"class":64},[58,1034,155],{"class":71},[58,1036,75],{"class":64},[58,1038,160],{"class":78},[58,1040,163],{"class":64},[58,1042,1043,1046,1048,1050,1052,1054,1056,1059,1061,1064],{"class":60,"line":676},[58,1044,1045],{"class":71},"            \"zipCode\"",[58,1047,152],{"class":64},[58,1049,155],{"class":71},[58,1051,75],{"class":64},[58,1053,160],{"class":78},[58,1055,405],{"class":64},[58,1057,1058],{"class":71},"\"pattern\"",[58,1060,75],{"class":64},[58,1062,1063],{"class":78},"\"^[0-9]{5}$\"",[58,1065,181],{"class":64},[58,1067,1068],{"class":60,"line":684},[58,1069,1070],{"class":64},"          },\n",[58,1072,1073,1076,1078,1081,1083,1086],{"class":60,"line":695},[58,1074,1075],{"class":71},"          \"required\"",[58,1077,724],{"class":64},[58,1079,1080],{"class":78},"\"street\"",[58,1082,405],{"class":64},[58,1084,1085],{"class":78},"\"city\"",[58,1087,735],{"class":64},[58,1089,1090],{"class":60,"line":706},[58,1091,1092],{"class":64},"        }\n",[58,1094,1095],{"class":60,"line":712},[58,1096,1097],{"class":64},"      },\n",[58,1099,1100,1103,1105,1108,1110,1113],{"class":60,"line":718},[58,1101,1102],{"class":71},"      \"required\"",[58,1104,724],{"class":64},[58,1106,1107],{"class":78},"\"firstName\"",[58,1109,405],{"class":64},[58,1111,1112],{"class":78},"\"lastName\"",[58,1114,735],{"class":64},[58,1116,1117],{"class":60,"line":738},[58,1118,709],{"class":64},[58,1120,1122],{"class":60,"line":1121},21,[58,1123,187],{"class":64},[58,1125,1127],{"class":60,"line":1126},22,[58,1128,193],{"class":64},[323,1130,1132],{"id":1131},"array-validation","Array Validation",[48,1134,1136],{"className":50,"code":1135,"language":52,"meta":53,"style":53},"{\n  \"type\": \"array\",\n  \"items\": {\n    \"type\": \"object\",\n    \"properties\": {\n      \"id\": { \"type\": \"integer\" },\n      \"name\": { \"type\": \"string\" }\n    }\n  },\n  \"minItems\": 1,\n  \"maxItems\": 100,\n  \"uniqueItems\": true\n}\n",[55,1137,1138,1142,1152,1159,1170,1177,1192,1207,1211,1215,1227,1238,1248],{"__ignoreMap":53},[58,1139,1140],{"class":60,"line":61},[58,1141,65],{"class":64},[58,1143,1144,1146,1148,1150],{"class":60,"line":68},[58,1145,127],{"class":71},[58,1147,75],{"class":64},[58,1149,306],{"class":78},[58,1151,82],{"class":64},[58,1153,1154,1157],{"class":60,"line":85},[58,1155,1156],{"class":71},"  \"items\"",[58,1158,143],{"class":64},[58,1160,1161,1164,1166,1168],{"class":60,"line":98},[58,1162,1163],{"class":71},"    \"type\"",[58,1165,75],{"class":64},[58,1167,132],{"class":78},[58,1169,82],{"class":64},[58,1171,1172,1175],{"class":60,"line":111},[58,1173,1174],{"class":71},"    \"properties\"",[58,1176,143],{"class":64},[58,1178,1179,1182,1184,1186,1188,1190],{"class":60,"line":124},[58,1180,1181],{"class":71},"      \"id\"",[58,1183,152],{"class":64},[58,1185,155],{"class":71},[58,1187,75],{"class":64},[58,1189,274],{"class":78},[58,1191,163],{"class":64},[58,1193,1194,1197,1199,1201,1203,1205],{"class":60,"line":137},[58,1195,1196],{"class":71},"      \"name\"",[58,1198,152],{"class":64},[58,1200,155],{"class":71},[58,1202,75],{"class":64},[58,1204,160],{"class":78},[58,1206,181],{"class":64},[58,1208,1209],{"class":60,"line":146},[58,1210,709],{"class":64},[58,1212,1213],{"class":60,"line":166},[58,1214,715],{"class":64},[58,1216,1217,1220,1222,1225],{"class":60,"line":184},[58,1218,1219],{"class":71},"  \"minItems\"",[58,1221,75],{"class":64},[58,1223,1224],{"class":71},"1",[58,1226,82],{"class":64},[58,1228,1229,1232,1234,1236],{"class":60,"line":190},[58,1230,1231],{"class":71},"  \"maxItems\"",[58,1233,75],{"class":64},[58,1235,498],{"class":71},[58,1237,82],{"class":64},[58,1239,1240,1243,1245],{"class":60,"line":661},[58,1241,1242],{"class":71},"  \"uniqueItems\"",[58,1244,75],{"class":64},[58,1246,1247],{"class":71},"true\n",[58,1249,1250],{"class":60,"line":671},[58,1251,193],{"class":64},[15,1253,1254,1255,1258],{},"For arrays with different item types at different positions, use ",[55,1256,1257],{},"prefixItems",":",[48,1260,1262],{"className":50,"code":1261,"language":52,"meta":53,"style":53},"{\n  \"type\": \"array\",\n  \"prefixItems\": [\n    { \"type\": \"string\" },\n    { \"type\": \"number\" },\n    { \"type\": \"boolean\" }\n  ],\n  \"items\": false\n}\n",[55,1263,1264,1268,1278,1286,1299,1311,1323,1328,1336],{"__ignoreMap":53},[58,1265,1266],{"class":60,"line":61},[58,1267,65],{"class":64},[58,1269,1270,1272,1274,1276],{"class":60,"line":68},[58,1271,127],{"class":71},[58,1273,75],{"class":64},[58,1275,306],{"class":78},[58,1277,82],{"class":64},[58,1279,1280,1283],{"class":60,"line":85},[58,1281,1282],{"class":71},"  \"prefixItems\"",[58,1284,1285],{"class":64},": [\n",[58,1287,1288,1291,1293,1295,1297],{"class":60,"line":98},[58,1289,1290],{"class":64},"    { ",[58,1292,155],{"class":71},[58,1294,75],{"class":64},[58,1296,160],{"class":78},[58,1298,163],{"class":64},[58,1300,1301,1303,1305,1307,1309],{"class":60,"line":111},[58,1302,1290],{"class":64},[58,1304,155],{"class":71},[58,1306,75],{"class":64},[58,1308,178],{"class":78},[58,1310,163],{"class":64},[58,1312,1313,1315,1317,1319,1321],{"class":60,"line":124},[58,1314,1290],{"class":64},[58,1316,155],{"class":71},[58,1318,75],{"class":64},[58,1320,285],{"class":78},[58,1322,181],{"class":64},[58,1324,1325],{"class":60,"line":137},[58,1326,1327],{"class":64},"  ],\n",[58,1329,1330,1332,1334],{"class":60,"line":146},[58,1331,1156],{"class":71},[58,1333,75],{"class":64},[58,1335,830],{"class":71},[58,1337,1338],{"class":60,"line":166},[58,1339,193],{"class":64},[10,1341,1343],{"id":1342},"pattern-properties-and-property-names","Pattern Properties and Property Names",[323,1345,1347],{"id":1346},"pattern-properties","Pattern Properties",[15,1349,1350],{},"Validate property names that match a regex pattern:",[48,1352,1354],{"className":50,"code":1353,"language":52,"meta":53,"style":53},"{\n  \"type\": \"object\",\n  \"patternProperties\": {\n    \"^x-\": { \"type\": \"string\" },\n    \"^data-[a-z]+$\": { \"type\": \"integer\" }\n  }\n}\n",[55,1355,1356,1360,1370,1377,1392,1407,1411],{"__ignoreMap":53},[58,1357,1358],{"class":60,"line":61},[58,1359,65],{"class":64},[58,1361,1362,1364,1366,1368],{"class":60,"line":68},[58,1363,127],{"class":71},[58,1365,75],{"class":64},[58,1367,132],{"class":78},[58,1369,82],{"class":64},[58,1371,1372,1375],{"class":60,"line":85},[58,1373,1374],{"class":71},"  \"patternProperties\"",[58,1376,143],{"class":64},[58,1378,1379,1382,1384,1386,1388,1390],{"class":60,"line":98},[58,1380,1381],{"class":71},"    \"^x-\"",[58,1383,152],{"class":64},[58,1385,155],{"class":71},[58,1387,75],{"class":64},[58,1389,160],{"class":78},[58,1391,163],{"class":64},[58,1393,1394,1397,1399,1401,1403,1405],{"class":60,"line":111},[58,1395,1396],{"class":71},"    \"^data-[a-z]+$\"",[58,1398,152],{"class":64},[58,1400,155],{"class":71},[58,1402,75],{"class":64},[58,1404,274],{"class":78},[58,1406,181],{"class":64},[58,1408,1409],{"class":60,"line":124},[58,1410,187],{"class":64},[58,1412,1413],{"class":60,"line":137},[58,1414,193],{"class":64},[15,1416,1417,1418,1421,1422,1425],{},"This allows any property starting with ",[55,1419,1420],{},"x-"," (like ",[55,1423,1424],{},"x-custom-header",") to be a string.",[323,1427,1429],{"id":1428},"property-names-validation","Property Names Validation",[15,1431,1432],{},"Validate that all property names meet certain criteria:",[48,1434,1436],{"className":50,"code":1435,"language":52,"meta":53,"style":53},"{\n  \"type\": \"object\",\n  \"propertyNames\": {\n    \"pattern\": \"^[a-z][a-zA-Z0-9]*$\"\n  }\n}\n",[55,1437,1438,1442,1452,1459,1469,1473],{"__ignoreMap":53},[58,1439,1440],{"class":60,"line":61},[58,1441,65],{"class":64},[58,1443,1444,1446,1448,1450],{"class":60,"line":68},[58,1445,127],{"class":71},[58,1447,75],{"class":64},[58,1449,132],{"class":78},[58,1451,82],{"class":64},[58,1453,1454,1457],{"class":60,"line":85},[58,1455,1456],{"class":71},"  \"propertyNames\"",[58,1458,143],{"class":64},[58,1460,1461,1464,1466],{"class":60,"line":98},[58,1462,1463],{"class":71},"    \"pattern\"",[58,1465,75],{"class":64},[58,1467,1468],{"class":78},"\"^[a-z][a-zA-Z0-9]*$\"\n",[58,1470,1471],{"class":60,"line":111},[58,1472,187],{"class":64},[58,1474,1475],{"class":60,"line":124},[58,1476,193],{"class":64},[10,1478,1480],{"id":1479},"conditional-schemas-ifthenelse","Conditional Schemas: if\u002Fthen\u002Felse",[15,1482,1483],{},"JSON Schema supports conditional validation:",[48,1485,1487],{"className":50,"code":1486,"language":52,"meta":53,"style":53},"{\n  \"type\": \"object\",\n  \"properties\": {\n    \"country\": { \"type\": \"string\" },\n    \"zipCode\": { \"type\": \"string\" }\n  },\n  \"if\": {\n    \"properties\": { \"country\": { \"const\": \"US\" } }\n  },\n  \"then\": {\n    \"properties\": { \"zipCode\": { \"pattern\": \"^[0-9]{5}(-[0-9]{4})?$\" } }\n  },\n  \"else\": {\n    \"properties\": { \"zipCode\": { \"type\": \"string\" } }\n  }\n}\n",[55,1488,1489,1493,1503,1509,1524,1539,1543,1550,1572,1576,1583,1603,1607,1614,1632,1636],{"__ignoreMap":53},[58,1490,1491],{"class":60,"line":61},[58,1492,65],{"class":64},[58,1494,1495,1497,1499,1501],{"class":60,"line":68},[58,1496,127],{"class":71},[58,1498,75],{"class":64},[58,1500,132],{"class":78},[58,1502,82],{"class":64},[58,1504,1505,1507],{"class":60,"line":85},[58,1506,140],{"class":71},[58,1508,143],{"class":64},[58,1510,1511,1514,1516,1518,1520,1522],{"class":60,"line":98},[58,1512,1513],{"class":71},"    \"country\"",[58,1515,152],{"class":64},[58,1517,155],{"class":71},[58,1519,75],{"class":64},[58,1521,160],{"class":78},[58,1523,163],{"class":64},[58,1525,1526,1529,1531,1533,1535,1537],{"class":60,"line":111},[58,1527,1528],{"class":71},"    \"zipCode\"",[58,1530,152],{"class":64},[58,1532,155],{"class":71},[58,1534,75],{"class":64},[58,1536,160],{"class":78},[58,1538,181],{"class":64},[58,1540,1541],{"class":60,"line":124},[58,1542,715],{"class":64},[58,1544,1545,1548],{"class":60,"line":137},[58,1546,1547],{"class":71},"  \"if\"",[58,1549,143],{"class":64},[58,1551,1552,1554,1556,1559,1561,1564,1566,1569],{"class":60,"line":146},[58,1553,1174],{"class":71},[58,1555,152],{"class":64},[58,1557,1558],{"class":71},"\"country\"",[58,1560,152],{"class":64},[58,1562,1563],{"class":71},"\"const\"",[58,1565,75],{"class":64},[58,1567,1568],{"class":78},"\"US\"",[58,1570,1571],{"class":64}," } }\n",[58,1573,1574],{"class":60,"line":166},[58,1575,715],{"class":64},[58,1577,1578,1581],{"class":60,"line":184},[58,1579,1580],{"class":71},"  \"then\"",[58,1582,143],{"class":64},[58,1584,1585,1587,1589,1592,1594,1596,1598,1601],{"class":60,"line":190},[58,1586,1174],{"class":71},[58,1588,152],{"class":64},[58,1590,1591],{"class":71},"\"zipCode\"",[58,1593,152],{"class":64},[58,1595,1058],{"class":71},[58,1597,75],{"class":64},[58,1599,1600],{"class":78},"\"^[0-9]{5}(-[0-9]{4})?$\"",[58,1602,1571],{"class":64},[58,1604,1605],{"class":60,"line":661},[58,1606,715],{"class":64},[58,1608,1609,1612],{"class":60,"line":671},[58,1610,1611],{"class":71},"  \"else\"",[58,1613,143],{"class":64},[58,1615,1616,1618,1620,1622,1624,1626,1628,1630],{"class":60,"line":676},[58,1617,1174],{"class":71},[58,1619,152],{"class":64},[58,1621,1591],{"class":71},[58,1623,152],{"class":64},[58,1625,155],{"class":71},[58,1627,75],{"class":64},[58,1629,160],{"class":78},[58,1631,1571],{"class":64},[58,1633,1634],{"class":60,"line":684},[58,1635,187],{"class":64},[58,1637,1638],{"class":60,"line":695},[58,1639,193],{"class":64},[15,1641,1642,1645,1646,1649,1650,1653,1654,1656],{},[197,1643,1644],{},"Logic:"," If ",[55,1647,1648],{},"country"," is \"US\", then ",[55,1651,1652],{},"zipCode"," must match the US format. Otherwise, ",[55,1655,1652],{}," can be any string.",[10,1658,1660],{"id":1659},"reusing-schemas-with-ref","Reusing Schemas with $ref",[15,1662,552,1663,1666],{},[55,1664,1665],{},"$ref"," keyword allows you to reference other schemas, enabling reuse and modularity.",[323,1668,1670],{"id":1669},"internal-references","Internal References",[48,1672,1674],{"className":50,"code":1673,"language":52,"meta":53,"style":53},"{\n  \"type\": \"object\",\n  \"definitions\": {\n    \"address\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"street\": { \"type\": \"string\" },\n        \"city\": { \"type\": \"string\" }\n      }\n    }\n  },\n  \"properties\": {\n    \"billingAddress\": { \"$ref\": \"#\u002Fdefinitions\u002Faddress\" },\n    \"shippingAddress\": { \"$ref\": \"#\u002Fdefinitions\u002Faddress\" }\n  }\n}\n",[55,1675,1676,1680,1690,1697,1704,1714,1720,1735,1750,1755,1759,1763,1769,1786,1801,1805],{"__ignoreMap":53},[58,1677,1678],{"class":60,"line":61},[58,1679,65],{"class":64},[58,1681,1682,1684,1686,1688],{"class":60,"line":68},[58,1683,127],{"class":71},[58,1685,75],{"class":64},[58,1687,132],{"class":78},[58,1689,82],{"class":64},[58,1691,1692,1695],{"class":60,"line":85},[58,1693,1694],{"class":71},"  \"definitions\"",[58,1696,143],{"class":64},[58,1698,1699,1702],{"class":60,"line":98},[58,1700,1701],{"class":71},"    \"address\"",[58,1703,143],{"class":64},[58,1705,1706,1708,1710,1712],{"class":60,"line":111},[58,1707,597],{"class":71},[58,1709,75],{"class":64},[58,1711,132],{"class":78},[58,1713,82],{"class":64},[58,1715,1716,1718],{"class":60,"line":124},[58,1717,953],{"class":71},[58,1719,143],{"class":64},[58,1721,1722,1725,1727,1729,1731,1733],{"class":60,"line":137},[58,1723,1724],{"class":71},"        \"street\"",[58,1726,152],{"class":64},[58,1728,155],{"class":71},[58,1730,75],{"class":64},[58,1732,160],{"class":78},[58,1734,163],{"class":64},[58,1736,1737,1740,1742,1744,1746,1748],{"class":60,"line":146},[58,1738,1739],{"class":71},"        \"city\"",[58,1741,152],{"class":64},[58,1743,155],{"class":71},[58,1745,75],{"class":64},[58,1747,160],{"class":78},[58,1749,181],{"class":64},[58,1751,1752],{"class":60,"line":166},[58,1753,1754],{"class":64},"      }\n",[58,1756,1757],{"class":60,"line":184},[58,1758,709],{"class":64},[58,1760,1761],{"class":60,"line":190},[58,1762,715],{"class":64},[58,1764,1765,1767],{"class":60,"line":661},[58,1766,140],{"class":71},[58,1768,143],{"class":64},[58,1770,1771,1774,1776,1779,1781,1784],{"class":60,"line":671},[58,1772,1773],{"class":71},"    \"billingAddress\"",[58,1775,152],{"class":64},[58,1777,1778],{"class":71},"\"$ref\"",[58,1780,75],{"class":64},[58,1782,1783],{"class":78},"\"#\u002Fdefinitions\u002Faddress\"",[58,1785,163],{"class":64},[58,1787,1788,1791,1793,1795,1797,1799],{"class":60,"line":676},[58,1789,1790],{"class":71},"    \"shippingAddress\"",[58,1792,152],{"class":64},[58,1794,1778],{"class":71},[58,1796,75],{"class":64},[58,1798,1783],{"class":78},[58,1800,181],{"class":64},[58,1802,1803],{"class":60,"line":684},[58,1804,187],{"class":64},[58,1806,1807],{"class":60,"line":695},[58,1808,193],{"class":64},[323,1810,1812],{"id":1811},"external-references","External References",[48,1814,1816],{"className":50,"code":1815,"language":52,"meta":53,"style":53},"{\n  \"type\": \"object\",\n  \"properties\": {\n    \"user\": {\n      \"$ref\": \"https:\u002F\u002Fexample.com\u002Fschemas\u002Fuser.json\"\n    }\n  }\n}\n",[55,1817,1818,1822,1832,1838,1844,1854,1858,1862],{"__ignoreMap":53},[58,1819,1820],{"class":60,"line":61},[58,1821,65],{"class":64},[58,1823,1824,1826,1828,1830],{"class":60,"line":68},[58,1825,127],{"class":71},[58,1827,75],{"class":64},[58,1829,132],{"class":78},[58,1831,82],{"class":64},[58,1833,1834,1836],{"class":60,"line":85},[58,1835,140],{"class":71},[58,1837,143],{"class":64},[58,1839,1840,1842],{"class":60,"line":98},[58,1841,936],{"class":71},[58,1843,143],{"class":64},[58,1845,1846,1849,1851],{"class":60,"line":111},[58,1847,1848],{"class":71},"      \"$ref\"",[58,1850,75],{"class":64},[58,1852,1853],{"class":78},"\"https:\u002F\u002Fexample.com\u002Fschemas\u002Fuser.json\"\n",[58,1855,1856],{"class":60,"line":124},[58,1857,709],{"class":64},[58,1859,1860],{"class":60,"line":137},[58,1861,187],{"class":64},[58,1863,1864],{"class":60,"line":146},[58,1865,193],{"class":64},[10,1867,1869],{"id":1868},"complete-example-user-registration","Complete Example: User Registration",[15,1871,1872],{},"Here's a comprehensive schema for a user registration API:",[48,1874,1876],{"className":50,"code":1875,"language":52,"meta":53,"style":53},"{\n  \"$schema\": \"https:\u002F\u002Fjson-schema.org\u002Fdraft\u002F2020-12\u002Fschema\",\n  \"$id\": \"https:\u002F\u002Fexample.com\u002Fschemas\u002Fregistration.json\",\n  \"title\": \"User Registration\",\n  \"description\": \"Schema for user registration payload\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"username\": {\n      \"type\": \"string\",\n      \"minLength\": 3,\n      \"maxLength\": 30,\n      \"pattern\": \"^[a-zA-Z0-9_]+$\"\n    },\n    \"email\": {\n      \"type\": \"string\",\n      \"format\": \"email\",\n      \"maxLength\": 255\n    },\n    \"password\": {\n      \"type\": \"string\",\n      \"minLength\": 8,\n      \"maxLength\": 128,\n      \"pattern\": \"^(?=.*[a-z])(?=.*[A-Z])(?=.*\\\\d)(?=.*[@$!%*?&])[A-Za-z\\\\d@$!%*?&]+$\"\n    },\n    \"age\": {\n      \"type\": \"integer\",\n      \"minimum\": 13,\n      \"maximum\": 120\n    },\n    \"termsAccepted\": {\n      \"type\": \"boolean\",\n      \"const\": true\n    }\n  },\n  \"required\": [\"username\", \"email\", \"password\", \"termsAccepted\"],\n  \"additionalProperties\": false\n}\n",[55,1877,1878,1882,1892,1903,1914,1925,1935,1941,1947,1957,1967,1978,1986,1990,1996,2006,2016,2025,2029,2036,2046,2057,2068,2089,2094,2101,2112,2124,2135,2140,2148,2159,2169,2174,2179,2205,2214],{"__ignoreMap":53},[58,1879,1880],{"class":60,"line":61},[58,1881,65],{"class":64},[58,1883,1884,1886,1888,1890],{"class":60,"line":68},[58,1885,72],{"class":71},[58,1887,75],{"class":64},[58,1889,79],{"class":78},[58,1891,82],{"class":64},[58,1893,1894,1896,1898,1901],{"class":60,"line":85},[58,1895,88],{"class":71},[58,1897,75],{"class":64},[58,1899,1900],{"class":78},"\"https:\u002F\u002Fexample.com\u002Fschemas\u002Fregistration.json\"",[58,1902,82],{"class":64},[58,1904,1905,1907,1909,1912],{"class":60,"line":98},[58,1906,101],{"class":71},[58,1908,75],{"class":64},[58,1910,1911],{"class":78},"\"User Registration\"",[58,1913,82],{"class":64},[58,1915,1916,1918,1920,1923],{"class":60,"line":111},[58,1917,114],{"class":71},[58,1919,75],{"class":64},[58,1921,1922],{"class":78},"\"Schema for user registration payload\"",[58,1924,82],{"class":64},[58,1926,1927,1929,1931,1933],{"class":60,"line":124},[58,1928,127],{"class":71},[58,1930,75],{"class":64},[58,1932,132],{"class":78},[58,1934,82],{"class":64},[58,1936,1937,1939],{"class":60,"line":137},[58,1938,140],{"class":71},[58,1940,143],{"class":64},[58,1942,1943,1945],{"class":60,"line":146},[58,1944,590],{"class":71},[58,1946,143],{"class":64},[58,1948,1949,1951,1953,1955],{"class":60,"line":166},[58,1950,597],{"class":71},[58,1952,75],{"class":64},[58,1954,160],{"class":78},[58,1956,82],{"class":64},[58,1958,1959,1961,1963,1965],{"class":60,"line":184},[58,1960,608],{"class":71},[58,1962,75],{"class":64},[58,1964,355],{"class":71},[58,1966,82],{"class":64},[58,1968,1969,1971,1973,1976],{"class":60,"line":190},[58,1970,619],{"class":71},[58,1972,75],{"class":64},[58,1974,1975],{"class":71},"30",[58,1977,82],{"class":64},[58,1979,1980,1982,1984],{"class":60,"line":661},[58,1981,631],{"class":71},[58,1983,75],{"class":64},[58,1985,636],{"class":78},[58,1987,1988],{"class":60,"line":671},[58,1989,641],{"class":64},[58,1991,1992,1994],{"class":60,"line":676},[58,1993,646],{"class":71},[58,1995,143],{"class":64},[58,1997,1998,2000,2002,2004],{"class":60,"line":684},[58,1999,597],{"class":71},[58,2001,75],{"class":64},[58,2003,160],{"class":78},[58,2005,82],{"class":64},[58,2007,2008,2010,2012,2014],{"class":60,"line":695},[58,2009,664],{"class":71},[58,2011,75],{"class":64},[58,2013,732],{"class":78},[58,2015,82],{"class":64},[58,2017,2018,2020,2022],{"class":60,"line":706},[58,2019,619],{"class":71},[58,2021,75],{"class":64},[58,2023,2024],{"class":71},"255\n",[58,2026,2027],{"class":60,"line":712},[58,2028,641],{"class":64},[58,2030,2031,2034],{"class":60,"line":718},[58,2032,2033],{"class":71},"    \"password\"",[58,2035,143],{"class":64},[58,2037,2038,2040,2042,2044],{"class":60,"line":738},[58,2039,597],{"class":71},[58,2041,75],{"class":64},[58,2043,160],{"class":78},[58,2045,82],{"class":64},[58,2047,2048,2050,2052,2055],{"class":60,"line":1121},[58,2049,608],{"class":71},[58,2051,75],{"class":64},[58,2053,2054],{"class":71},"8",[58,2056,82],{"class":64},[58,2058,2059,2061,2063,2066],{"class":60,"line":1126},[58,2060,619],{"class":71},[58,2062,75],{"class":64},[58,2064,2065],{"class":71},"128",[58,2067,82],{"class":64},[58,2069,2071,2073,2075,2078,2081,2084,2086],{"class":60,"line":2070},23,[58,2072,631],{"class":71},[58,2074,75],{"class":64},[58,2076,2077],{"class":78},"\"^(?=.*[a-z])(?=.*[A-Z])(?=.*",[58,2079,2080],{"class":71},"\\\\",[58,2082,2083],{"class":78},"d)(?=.*[@$!%*?&])[A-Za-z",[58,2085,2080],{"class":71},[58,2087,2088],{"class":78},"d@$!%*?&]+$\"\n",[58,2090,2092],{"class":60,"line":2091},24,[58,2093,641],{"class":64},[58,2095,2097,2099],{"class":60,"line":2096},25,[58,2098,679],{"class":71},[58,2100,143],{"class":64},[58,2102,2104,2106,2108,2110],{"class":60,"line":2103},26,[58,2105,597],{"class":71},[58,2107,75],{"class":64},[58,2109,274],{"class":78},[58,2111,82],{"class":64},[58,2113,2115,2117,2119,2122],{"class":60,"line":2114},27,[58,2116,698],{"class":71},[58,2118,75],{"class":64},[58,2120,2121],{"class":71},"13",[58,2123,82],{"class":64},[58,2125,2127,2130,2132],{"class":60,"line":2126},28,[58,2128,2129],{"class":71},"      \"maximum\"",[58,2131,75],{"class":64},[58,2133,2134],{"class":71},"120\n",[58,2136,2138],{"class":60,"line":2137},29,[58,2139,641],{"class":64},[58,2141,2143,2146],{"class":60,"line":2142},30,[58,2144,2145],{"class":71},"    \"termsAccepted\"",[58,2147,143],{"class":64},[58,2149,2151,2153,2155,2157],{"class":60,"line":2150},31,[58,2152,597],{"class":71},[58,2154,75],{"class":64},[58,2156,285],{"class":78},[58,2158,82],{"class":64},[58,2160,2162,2165,2167],{"class":60,"line":2161},32,[58,2163,2164],{"class":71},"      \"const\"",[58,2166,75],{"class":64},[58,2168,1247],{"class":71},[58,2170,2172],{"class":60,"line":2171},33,[58,2173,709],{"class":64},[58,2175,2177],{"class":60,"line":2176},34,[58,2178,715],{"class":64},[58,2180,2182,2184,2186,2188,2190,2192,2194,2197,2199,2202],{"class":60,"line":2181},35,[58,2183,721],{"class":71},[58,2185,724],{"class":64},[58,2187,727],{"class":78},[58,2189,405],{"class":64},[58,2191,732],{"class":78},[58,2193,405],{"class":64},[58,2195,2196],{"class":78},"\"password\"",[58,2198,405],{"class":64},[58,2200,2201],{"class":78},"\"termsAccepted\"",[58,2203,2204],{"class":64},"],\n",[58,2206,2208,2210,2212],{"class":60,"line":2207},36,[58,2209,825],{"class":71},[58,2211,75],{"class":64},[58,2213,830],{"class":71},[58,2215,2217],{"class":60,"line":2216},37,[58,2218,193],{"class":64},[10,2220,2222],{"id":2221},"validation-with-ajv","Validation with Ajv",[15,2224,2225,2232],{},[2226,2227,2231],"a",{"href":2228,"rel":2229},"https:\u002F\u002Fajv.js.org\u002F",[2230],"nofollow","Ajv"," (Another JSON Schema Validator) is the most popular JSON Schema validator for JavaScript.",[323,2234,2236],{"id":2235},"installation","Installation",[48,2238,2242],{"className":2239,"code":2240,"language":2241,"meta":53,"style":53},"language-bash shiki shiki-themes github-light github-dark","npm install ajv ajv-formats\n","bash",[55,2243,2244],{"__ignoreMap":53},[58,2245,2246,2250,2253,2256],{"class":60,"line":61},[58,2247,2249],{"class":2248},"sScJk","npm",[58,2251,2252],{"class":78}," install",[58,2254,2255],{"class":78}," ajv",[58,2257,2258],{"class":78}," ajv-formats\n",[323,2260,2262],{"id":2261},"basic-usage","Basic Usage",[48,2264,2268],{"className":2265,"code":2266,"language":2267,"meta":53,"style":53},"language-javascript shiki shiki-themes github-light github-dark","import Ajv from 'ajv';\nimport addFormats from 'ajv-formats';\n\nconst ajv = new Ajv({ allErrors: true });\naddFormats(ajv); \u002F\u002F Adds format validators like \"email\", \"uri\", etc.\n\nconst schema = {\n  type: 'object',\n  properties: {\n    name: { type: 'string' },\n    age: { type: 'integer', minimum: 0 }\n  },\n  required: ['name']\n};\n\nconst validate = ajv.compile(schema);\n\nconst data = { name: 'John', age: 30 };\nconst valid = validate(data);\n\nif (!valid) {\n  console.log('Validation errors:', validate.errors);\n}\n","javascript",[55,2269,2270,2288,2302,2308,2333,2345,2349,2361,2371,2376,2386,2401,2405,2415,2420,2424,2442,2446,2469,2483,2487,2501,2518],{"__ignoreMap":53},[58,2271,2272,2276,2279,2282,2285],{"class":60,"line":61},[58,2273,2275],{"class":2274},"szBVR","import",[58,2277,2278],{"class":64}," Ajv ",[58,2280,2281],{"class":2274},"from",[58,2283,2284],{"class":78}," 'ajv'",[58,2286,2287],{"class":64},";\n",[58,2289,2290,2292,2295,2297,2300],{"class":60,"line":68},[58,2291,2275],{"class":2274},[58,2293,2294],{"class":64}," addFormats ",[58,2296,2281],{"class":2274},[58,2298,2299],{"class":78}," 'ajv-formats'",[58,2301,2287],{"class":64},[58,2303,2304],{"class":60,"line":85},[58,2305,2307],{"emptyLinePlaceholder":2306},true,"\n",[58,2309,2310,2313,2315,2318,2321,2324,2327,2330],{"class":60,"line":98},[58,2311,2312],{"class":2274},"const",[58,2314,2255],{"class":71},[58,2316,2317],{"class":2274}," =",[58,2319,2320],{"class":2274}," new",[58,2322,2323],{"class":2248}," Ajv",[58,2325,2326],{"class":64},"({ allErrors: ",[58,2328,2329],{"class":71},"true",[58,2331,2332],{"class":64}," });\n",[58,2334,2335,2338,2341],{"class":60,"line":111},[58,2336,2337],{"class":2248},"addFormats",[58,2339,2340],{"class":64},"(ajv); ",[58,2342,2344],{"class":2343},"sJ8bj","\u002F\u002F Adds format validators like \"email\", \"uri\", etc.\n",[58,2346,2347],{"class":60,"line":124},[58,2348,2307],{"emptyLinePlaceholder":2306},[58,2350,2351,2353,2356,2358],{"class":60,"line":137},[58,2352,2312],{"class":2274},[58,2354,2355],{"class":71}," schema",[58,2357,2317],{"class":2274},[58,2359,2360],{"class":64}," {\n",[58,2362,2363,2366,2369],{"class":60,"line":146},[58,2364,2365],{"class":64},"  type: ",[58,2367,2368],{"class":78},"'object'",[58,2370,82],{"class":64},[58,2372,2373],{"class":60,"line":166},[58,2374,2375],{"class":64},"  properties: {\n",[58,2377,2378,2381,2384],{"class":60,"line":184},[58,2379,2380],{"class":64},"    name: { type: ",[58,2382,2383],{"class":78},"'string'",[58,2385,163],{"class":64},[58,2387,2388,2391,2394,2397,2399],{"class":60,"line":190},[58,2389,2390],{"class":64},"    age: { type: ",[58,2392,2393],{"class":78},"'integer'",[58,2395,2396],{"class":64},", minimum: ",[58,2398,486],{"class":71},[58,2400,181],{"class":64},[58,2402,2403],{"class":60,"line":661},[58,2404,715],{"class":64},[58,2406,2407,2410,2413],{"class":60,"line":671},[58,2408,2409],{"class":64},"  required: [",[58,2411,2412],{"class":78},"'name'",[58,2414,735],{"class":64},[58,2416,2417],{"class":60,"line":676},[58,2418,2419],{"class":64},"};\n",[58,2421,2422],{"class":60,"line":684},[58,2423,2307],{"emptyLinePlaceholder":2306},[58,2425,2426,2428,2431,2433,2436,2439],{"class":60,"line":695},[58,2427,2312],{"class":2274},[58,2429,2430],{"class":71}," validate",[58,2432,2317],{"class":2274},[58,2434,2435],{"class":64}," ajv.",[58,2437,2438],{"class":2248},"compile",[58,2440,2441],{"class":64},"(schema);\n",[58,2443,2444],{"class":60,"line":706},[58,2445,2307],{"emptyLinePlaceholder":2306},[58,2447,2448,2450,2453,2455,2458,2461,2464,2466],{"class":60,"line":712},[58,2449,2312],{"class":2274},[58,2451,2452],{"class":71}," data",[58,2454,2317],{"class":2274},[58,2456,2457],{"class":64}," { name: ",[58,2459,2460],{"class":78},"'John'",[58,2462,2463],{"class":64},", age: ",[58,2465,1975],{"class":71},[58,2467,2468],{"class":64}," };\n",[58,2470,2471,2473,2476,2478,2480],{"class":60,"line":718},[58,2472,2312],{"class":2274},[58,2474,2475],{"class":71}," valid",[58,2477,2317],{"class":2274},[58,2479,2430],{"class":2248},[58,2481,2482],{"class":64},"(data);\n",[58,2484,2485],{"class":60,"line":738},[58,2486,2307],{"emptyLinePlaceholder":2306},[58,2488,2489,2492,2495,2498],{"class":60,"line":1121},[58,2490,2491],{"class":2274},"if",[58,2493,2494],{"class":64}," (",[58,2496,2497],{"class":2274},"!",[58,2499,2500],{"class":64},"valid) {\n",[58,2502,2503,2506,2509,2512,2515],{"class":60,"line":1126},[58,2504,2505],{"class":64},"  console.",[58,2507,2508],{"class":2248},"log",[58,2510,2511],{"class":64},"(",[58,2513,2514],{"class":78},"'Validation errors:'",[58,2516,2517],{"class":64},", validate.errors);\n",[58,2519,2520],{"class":60,"line":2070},[58,2521,193],{"class":64},[323,2523,2525],{"id":2524},"online-validation","Online Validation",[15,2527,2528,2529,2533],{},"You can also validate JSON against schemas using online tools or our ",[2226,2530,2532],{"href":2531},"\u002Ftools\u002Fjson-formatter","JSON Formatter"," tool.",[10,2535,2537],{"id":2536},"common-validation-keywords-reference","Common Validation Keywords Reference",[2539,2540,2541,2557],"table",{},[2542,2543,2544],"thead",{},[2545,2546,2547,2551,2554],"tr",{},[2548,2549,2550],"th",{},"Keyword",[2548,2552,2553],{},"Applies To",[2548,2555,2556],{},"Description",[2558,2559,2560,2573,2585,2596,2613,2629,2641,2657,2673,2684,2695,2707],"tbody",{},[2545,2561,2562,2567,2570],{},[2563,2564,2565],"td",{},[55,2566,228],{},[2563,2568,2569],{},"any",[2563,2571,2572],{},"Specifies data type",[2545,2574,2575,2580,2582],{},[2563,2576,2577],{},[55,2578,2579],{},"enum",[2563,2581,2569],{},[2563,2583,2584],{},"Must be one of the specified values",[2545,2586,2587,2591,2593],{},[2563,2588,2589],{},[55,2590,2312],{},[2563,2592,2569],{},[2563,2594,2595],{},"Must be exactly this value",[2545,2597,2598,2607,2610],{},[2563,2599,2600,2603,2604],{},[55,2601,2602],{},"minimum"," \u002F ",[55,2605,2606],{},"maximum",[2563,2608,2609],{},"number",[2563,2611,2612],{},"Range constraints",[2545,2614,2615,2623,2626],{},[2563,2616,2617,2603,2620],{},[55,2618,2619],{},"minLength",[55,2621,2622],{},"maxLength",[2563,2624,2625],{},"string",[2563,2627,2628],{},"Length constraints",[2545,2630,2631,2636,2638],{},[2563,2632,2633],{},[55,2634,2635],{},"pattern",[2563,2637,2625],{},[2563,2639,2640],{},"Regex pattern",[2545,2642,2643,2651,2654],{},[2563,2644,2645,2603,2648],{},[55,2646,2647],{},"minItems",[55,2649,2650],{},"maxItems",[2563,2652,2653],{},"array",[2563,2655,2656],{},"Array length constraints",[2545,2658,2659,2667,2670],{},[2563,2660,2661,2603,2664],{},[55,2662,2663],{},"minProperties",[55,2665,2666],{},"maxProperties",[2563,2668,2669],{},"object",[2563,2671,2672],{},"Object property count",[2545,2674,2675,2679,2681],{},[2563,2676,2677],{},[55,2678,559],{},[2563,2680,2669],{},[2563,2682,2683],{},"Required property names",[2545,2685,2686,2690,2692],{},[2563,2687,2688],{},[55,2689,555],{},[2563,2691,2669],{},[2563,2693,2694],{},"Property schemas",[2545,2696,2697,2702,2704],{},[2563,2698,2699],{},[55,2700,2701],{},"additionalProperties",[2563,2703,2669],{},[2563,2705,2706],{},"Control extra properties",[2545,2708,2709,2714,2716],{},[2563,2710,2711],{},[55,2712,2713],{},"items",[2563,2715,2653],{},[2563,2717,2718],{},"Schema for array items",[10,2720,2722],{"id":2721},"best-practices","Best Practices",[2724,2725,2726,2734,2743,2753,2762,2768,2776],"ol",{},[25,2727,2728,2733],{},[197,2729,2730,2731],{},"Always specify ",[55,2732,206],{}," to ensure consistent behavior across implementations",[25,2735,2736,2742],{},[197,2737,2738,2739],{},"Use ",[55,2740,2741],{},"additionalProperties: false"," for strict object validation",[25,2744,2745,2752],{},[197,2746,2747,2748,219,2750],{},"Provide meaningful ",[55,2749,218],{},[55,2751,222],{}," for documentation",[25,2754,2755,2761],{},[197,2756,2738,2757,2760],{},[55,2758,2759],{},"allErrors: true"," in Ajv"," during development to see all validation errors",[25,2763,2764,2767],{},[197,2765,2766],{},"Test your schemas"," with both valid and invalid data",[25,2769,2770,2775],{},[197,2771,2738,2772,2774],{},[55,2773,1665],{}," for reusable components"," to avoid duplication",[25,2777,2778,2785],{},[197,2779,2780,2781,2784],{},"Consider using ",[55,2782,2783],{},"examples"," keyword"," to document expected data formats",[10,2787,2789],{"id":2788},"related-tools","Related Tools",[22,2791,2792],{},[25,2793,2794,2796],{},[2226,2795,2532],{"href":2531}," — Format and pretty-print JSON",[2798,2799,2800],"style",{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":53,"searchDepth":68,"depth":68,"links":2802},[2803,2804,2805,2809,2812,2816,2820,2821,2825,2826,2831,2832,2833],{"id":12,"depth":68,"text":13},{"id":42,"depth":68,"text":43},{"id":232,"depth":68,"text":233,"children":2806},[2807,2808],{"id":325,"depth":85,"text":326},{"id":456,"depth":85,"text":457},{"id":548,"depth":68,"text":549,"children":2810},[2811],{"id":770,"depth":85,"text":771},{"id":901,"depth":68,"text":902,"children":2813},[2814,2815],{"id":905,"depth":85,"text":906},{"id":1131,"depth":85,"text":1132},{"id":1342,"depth":68,"text":1343,"children":2817},[2818,2819],{"id":1346,"depth":85,"text":1347},{"id":1428,"depth":85,"text":1429},{"id":1479,"depth":68,"text":1480},{"id":1659,"depth":68,"text":1660,"children":2822},[2823,2824],{"id":1669,"depth":85,"text":1670},{"id":1811,"depth":85,"text":1812},{"id":1868,"depth":68,"text":1869},{"id":2221,"depth":68,"text":2222,"children":2827},[2828,2829,2830],{"id":2235,"depth":85,"text":2236},{"id":2261,"depth":85,"text":2262},{"id":2524,"depth":85,"text":2525},{"id":2536,"depth":68,"text":2537},{"id":2721,"depth":68,"text":2722},{"id":2788,"depth":68,"text":2789},"2026-05-26","Master JSON Schema validation with practical examples. Learn type, properties, required, pattern, $ref and how to use Ajv for robust JSON validation.","md",{"immutable":2306},"\u002Fguides\u002Fjson-schema-validation",{"title":5,"description":2835},"guides\u002Fjson-schema-validation","qIouMVDpZwIPX06keJxzVrkQXchFV24RBIBckXcvfOE",1780401323940]