8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly<div class="intro">
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly <p>DataSchema.JSON normalizes arbitrary JSON data against a given schema into an object with known properties.</p>
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly</div>
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly
819e90d415ed17d59af3a247b2ad9d6feb0c21b5Luke Smith<div class="example yui3-skin-sam">
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly {{>dataschema-json-source}}
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly</div>
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly<p>In order to use DataSchema.JSON, input data must be a JavaScript object.</p>
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly```
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny DonnellyYUI().use("dataschema-json", function(Y) {
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly var data_in = {
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly total:10,
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly results:[
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly {n:1, fname:"George", lname:"Washington"},
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly {n:2, fname:"John", lname:"Adams"},
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly {n:3, fname:"Thomas", lname:"Jefferson"},
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly {n:4, fname:"James", lname:"Madison"},
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly {n:5, fname:"James", lname:"Monroe"},
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly {n:6, fname:"John", mname:"Quincy", lname:"Adams"},
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly {n:7, fname:"Andrew", lname:"Jackson"},
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly {n:8, fname:"Martin", lname:"Van Buren"},
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly {n:9, fname:"William", mName:"Henry", lname:"Harrison"},
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly {n:10, fname:"John", lname:"Tyler"}
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly ]
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly },
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly schema = {
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly metaFields: {total:"total"},
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly resultListLocator: "results",
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly // Or simply: ["n", "fname", "lname"]
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly resultFields: [{key:"n"}, {key:"fname"}, {key:"lname"}]
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly },
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly data_out = Y.DataSchema.JSON.apply(schema, data_in));
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly alert(data_out);
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly});
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly```
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly<p>The data itself can get fairly complex, with deeply nested arrays and objects. In your schema, you can use dot notation and the array-index syntax to define these locations. When necessary, you can also use object-bracket notation to define locations that might otherwise be invalid with dot notation.</p>
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly```
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny DonnellyYUI().use("dataschema-json", function(Y) {
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly var data_in = {
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly "profile":{
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly "current":160,
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly "target":150
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly },
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly "reference": [
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly {
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly "category":"exercise",
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly "type":"expenditure",
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly "activities":[
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly {"name":"biking", "calories":550},
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly {"name":"golf", "calories":1000},
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly {"name":"running", "calories":650},
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly {"name":"swimming", "calories":650},
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly {"name":"walking", "calories":225}
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly ]
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly },
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly {
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly "category":"nutrition",
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly "type":"intake",
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly "fruit":[
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly {"name":"apple", "calories":70},
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly {"name":"banana", "calories":70},
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly {"name":"orange", "calories":90},
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly ],
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly "vegetables":[
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly {"name":"baked potato", "calories":150},
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly {"name":"broccoli", "calories":50},
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly {"name":"green beans", "calories":30}
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly ]
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly }
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly ],
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly "program": [
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly {
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly "category":"exercise",
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly "weekly schedule":[
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly {"day":"sunday", "activity":"swimming"},
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly {"day":"monday", "activity":"running"},
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly {"day":"tuesday", "activity":"biking"},
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly {"day":"wednesday", "activity":"running"},
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly {"day":"thursday", "activity":"swimming"},
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly {"day":"friday", "activity":"running"},
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly {"day":"saturday", "activity":"golf"}
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly ]
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly },
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly {
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly "category":"diet",
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly "schedule":[
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly ]
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly }
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly ]
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly },
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly schema = {
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly metaFields: {current:"profile.current", target:"profile.target",
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly reference:"reference[0].activities"},
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly resultListLocator: "program[0]['weekly schedule']",
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly // Or simply: ["day", "activity"]
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly resultFields: [{key:"day"}, {key:"activity"}]
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly },
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly data_out = Y.DataSchema.Array.apply(schema, data_in));
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly alert(data_out);
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly});
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly```