dataschema-json.mustache revision 8f9d94fb7812612dff92ce14a37dbcad4ff02c1c
ddccd5811feff696ba460dabfb666ce61040f545Andreas Gustafsson<div class="intro">
b0e8629055a766d4555a005a283c2889a5974945Mark Andrews <p>DataSchema.JSON normalizes arbitrary JSON data against a given schema into an object with known properties.</p>
75c0816e8295e180f4bc7f10db3d0d880383bc1cMark Andrews</div>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
4a14ce5ba00ab7bc55c99ffdcf59c7a4ab902721Automatic Updater<div class="example">
ddccd5811feff696ba460dabfb666ce61040f545Andreas Gustafsson {{>dataschema-json-source}}
ddccd5811feff696ba460dabfb666ce61040f545Andreas Gustafsson</div>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
8a66318e41ed14c5a88130e8c362610e8faa2121Mark Andrews<p>In order to use DataSchema.JSON, input data must be a JavaScript object.</p>
8a66318e41ed14c5a88130e8c362610e8faa2121Mark Andrews
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein```
8a66318e41ed14c5a88130e8c362610e8faa2121Mark AndrewsYUI().use("dataschema-json", function(Y) {
8a66318e41ed14c5a88130e8c362610e8faa2121Mark Andrews var data_in = {
8a66318e41ed14c5a88130e8c362610e8faa2121Mark Andrews total:10,
8a66318e41ed14c5a88130e8c362610e8faa2121Mark Andrews results:[
ddccd5811feff696ba460dabfb666ce61040f545Andreas Gustafsson {n:1, fname:"George", lname:"Washington"},
4a14ce5ba00ab7bc55c99ffdcf59c7a4ab902721Automatic Updater {n:2, fname:"John", lname:"Adams"},
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein {n:3, fname:"Thomas", lname:"Jefferson"},
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein {n:4, fname:"James", lname:"Madison"},
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein {n:5, fname:"James", lname:"Monroe"},
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein {n:6, fname:"John", mname:"Quincy", lname:"Adams"},
e21a2904f02a03fa06b6db04d348f65fe9c67b2bMark Andrews {n:7, fname:"Andrew", lname:"Jackson"},
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein {n:8, fname:"Martin", lname:"Van Buren"},
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein {n:9, fname:"William", mName:"Henry", lname:"Harrison"},
4abdfc917e6635a7c81d1f931a0c79227e72d025Mark Andrews {n:10, fname:"John", lname:"Tyler"}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ]
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein },
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein schema = {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein metaFields: {total:"total"},
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein resultListLocator: "results",
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein // Or simply: ["n", "fname", "lname"]
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein resultFields: [{key:"n"}, {key:"fname"}, {key:"lname"}]
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein },
e21a2904f02a03fa06b6db04d348f65fe9c67b2bMark Andrews data_out = Y.DataSchema.JSON.apply(schema, data_in));
e21a2904f02a03fa06b6db04d348f65fe9c67b2bMark Andrews
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein alert(data_out);
e21a2904f02a03fa06b6db04d348f65fe9c67b2bMark Andrews});
e21a2904f02a03fa06b6db04d348f65fe9c67b2bMark Andrews```
e21a2904f02a03fa06b6db04d348f65fe9c67b2bMark Andrews
e21a2904f02a03fa06b6db04d348f65fe9c67b2bMark Andrews<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>
e21a2904f02a03fa06b6db04d348f65fe9c67b2bMark Andrews
e21a2904f02a03fa06b6db04d348f65fe9c67b2bMark Andrews```
e21a2904f02a03fa06b6db04d348f65fe9c67b2bMark AndrewsYUI().use("dataschema-json", function(Y) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein var data_in = {
e21a2904f02a03fa06b6db04d348f65fe9c67b2bMark Andrews "profile":{
e21a2904f02a03fa06b6db04d348f65fe9c67b2bMark Andrews "current":160,
e21a2904f02a03fa06b6db04d348f65fe9c67b2bMark Andrews "target":150
e21a2904f02a03fa06b6db04d348f65fe9c67b2bMark Andrews },
e21a2904f02a03fa06b6db04d348f65fe9c67b2bMark Andrews "reference": [
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "category":"exercise",
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "type":"expenditure",
b0e8629055a766d4555a005a283c2889a5974945Mark Andrews "activities":[
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein {"name":"biking", "calories":550},
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein {"name":"golf", "calories":1000},
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein {"name":"running", "calories":650},
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein {"name":"swimming", "calories":650},
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein {"name":"walking", "calories":225}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ]
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein },
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "category":"nutrition",
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "type":"intake",
61e1dc26d62c2a0059e3ca7efe2ad0f4a5b8df92Mark Andrews "fruit":[
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein {"name":"apple", "calories":70},
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein {"name":"banana", "calories":70},
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein {"name":"orange", "calories":90},
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ],
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "vegetables":[
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein {"name":"baked potato", "calories":150},
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein {"name":"broccoli", "calories":50},
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein {"name":"green beans", "calories":30}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ]
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ],
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "program": [
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "category":"exercise",
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "weekly schedule":[
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein {"day":"sunday", "activity":"swimming"},
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein {"day":"monday", "activity":"running"},
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein {"day":"tuesday", "activity":"biking"},
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein {"day":"wednesday", "activity":"running"},
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein {"day":"thursday", "activity":"swimming"},
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein {"day":"friday", "activity":"running"},
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein {"day":"saturday", "activity":"golf"}
b0e8629055a766d4555a005a283c2889a5974945Mark Andrews ]
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein },
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "category":"diet",
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "schedule":[
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ]
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ]
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein },
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein schema = {
b0e8629055a766d4555a005a283c2889a5974945Mark Andrews metaFields: {current:"profile.current", target:"profile.target",
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein reference:"reference[0].activities"},
61e1dc26d62c2a0059e3ca7efe2ad0f4a5b8df92Mark Andrews resultListLocator: "program[0]['weekly schedule']",
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein // Or simply: ["day", "activity"]
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein resultFields: [{key:"day"}, {key:"activity"}]
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein },
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein data_out = Y.DataSchema.Array.apply(schema, data_in));
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
alert(data_out);
});
```