Re: [WebDNA] JSON objects and [JSONstore]: new cell

This WebDNA talk-list message is from

2014


It keeps the original formatting.
numero = 111613
interpreted = N
texte = The new [JSONstore] is available on the v.8 fastCGI version for linux = and OSX. http://www.webdna.us/page.dna?numero=3D307 - chris On Sep 25, 2014, at 22:00, Jym Duane wrote: > looks like an excellent addition. >=20 > jym >=20 >=20 > On 9/25/2014 5:07 AM, christophe.billiottet@webdna.us wrote: >> Because more and more websites are relying on javascript (browser = side), we have decided to give WebDNA a tool to store complex JSON = objects into a flat database. >>=20 >> JSON object and XML format have more or less the same structure, = however XML specification does not match the data model for most = programming languages which makes it slow and tedious for programmers to = parse. Compared to JSON, XML has a low data-to-markup ratio which = results in it being more difficult for humans to read and write. JSON = standard is language-independent and its data structures, arrays and = objects, are universally recognized. These structures are supported in = some way by nearly all modern programming languages and are familiar to = nearly all programmers. These qualities make it an ideal format for data = interchange on the web. It handles different types of data: numbers, = strings, boolean, arrays=85 The problem relies in JSON objects structure = that can be complicated to handle as it can include other nested = objects, arrays, arrays with objects, objects with nested arrays, = objects with nested objects, object with nested arrays and objects=85 a = number of structures that are difficult to recognize and parse and even = more complicated to store. >>=20 >> The no-sql is one answer. I already explained here how to use WebDNA = as no-sql database, each JSON object being stored as a text file indexed = into a WebDNA database. >>=20 >> We went one step further and built a new tag, a =93cell=94 = [JSONstore] that can analyze, recognize, parse and store JSON object = into our usual WebDNA flat database. We made it solid and = stucture-independant. >>=20 >> So, let=92s see an example of a JSON Object with a nested array; this = should not be too difficult for a human to read >>=20 >> var myObject =3D { >> "first": "John", >> "last": "Doe", >> "age": 39, >> "interests": [ "Reading", "Mountain Biking", "Hacking" ], >> "favorites": { >> "color": "Blue", >> "sport": "Soccer", >> "food": "Spaghetti" >> }, >> "skills": [ >> { >> "category": "JavaScript", >> "tests": [ >> { "name": "One", "score": 90 }, >> { "name": "Two", "score": 96 } >> ] >> }, >> { >> "category": "CouchDB", >> "tests": [ >> { "name": "One", "score": 79 }, >> { "name": "Two", "score": 84 } >> ] >> }, >> { >> =93category": "WebDNA", >> "tests": [ >> { "name": "One", "score": 97 }, >> { "name": "Two", "score": 93 } >> ] >> } >> ] >> } >>=20 >>=20 >>=20 >>=20 >> We will make WebDNA store it in a flat database: simple data go the = usual way, like >>=20 >> first=3DJohn >> last=3DDoe >> age=3D39 >>=20 >> arrays will have a field with =93:array=94 appended to the field name = so WebDNA knows it is an array and that the content should not be = parsed. >>=20 >> interests:array=3D=93Reading=94,=93Mountain Biking=94,=93Hacking=94 >>=20 >> skills:array=3D{=93category=94:=94JavaScript=94,=94tests=94:[{=93name=94= :=94One", "score":90},{"name": "Two", "score": 96 = }]},{"category":"CouchDB","tests":[{"name":"One","score":79},{"name":"Two"= ,"score":84 }]}, = {=93category":"WebDNA",=93tests=94:[{"name":"One","score":97},{"name":"Two= ","score":93} >>=20 >> nested objects will be parsed and stored by appending the second = level field name to the first one, separated by a colon >>=20 >> favorites:color=3Dblue >> favorite:sport=3DSoccer >> favorite:food=3DSpaghetti >>=20 >>=20 >>=20 >> So, how to do that? first by preparing your database: it will include = these fields >>=20 >> firstlastageinterests:arrayfavorites:color= favorite:sport favorite:food skills:array >>=20 >> Then, using the new cell [JSONstore] and the database name >>=20 >> [JSONstore db=3Dwhatever.db] >> >> [/JSONstore] >>=20 >> (a debug=3Don option is available to know exactly what and how it is = stored) >>=20 >> by replacing by the actual object, the cell [JSONstore] = will populate the database like this, automatically >>=20 >> first=3DJohn >> last=3DDoe >> age=3D39 >> interests:array=3D=93Reading=94, =93Mountain Biking", "Hacking" >> favorites:color=3DBlue >> favorites:sport=3DSoccer >> favorites:food=3DSpaghetti >> skills:array=3D{ "category": "JavaScript", "tests": [ { "name": = "One", "score": 90 }, { "name": "Two", "score": 96 } ] }, { "category": = "CouchDB", "tests": [ { "name": "One", "score": 79 }, { "name": "Two", = "score": 84 } ] }, { "category": "WebDNA", "tests": [ { "name": "One", = "score": 97 }, { "name": "Two", "score": 93 } ] } >>=20 >> Sorting the data to recompose the original object is straightforward >>=20 >> { >> =93first=94: =93[first]", >> =93last=94: "[last]", >> =93interests=94: [interest:array], >> "favorites": { >> =93color=94: =93[favorite:color]=94, >> =93food=94: =93[favorite:food]" >> =93sport=94: =93[favorite:sport]" >> } >> =93skills=94: [skills:array] >> } >>=20 >>=20 >> JQUERY, for instance, will work well with it. >>=20 >> This has been tested against the following examples, some of them = being somewhat difficult to work with. >>=20 >>=20 >>=20 >>=20 >> -------------- >> { "accounting" : [ >> { "firstName" : "John", >> "lastName" : "Doe", >> "age" : 23 }, >> { "firstName" : "Mary", >> "lastName" : "Smith", >> "age" : 32 } >> ], >> "sales" : [ >> { "firstName" : "Sally", >> "lastName" : "Green", >> "age" : 27 }, >> { "firstName" : "Jim", >> "lastName" : "Galley", >> "age" : 41 } >> ] >> } >> -------------- >> { >> "problems": [{ >> "Diabetes":[{ >> "medications":[{ >> "medicationsClasses":[{ >> "className":[{ >> "associatedDrug":[{ >> "name":"asprin", >> "dose":"", >> "strength":"500 mg" >> }], >> "associatedDrug#2":[{ >> "name":"somethingElse", >> "dose":"", >> "strength":"500 mg" >> }] >> }], >> "className2":[{ >> "associatedDrug":[{ >> "name":"asprin", >> "dose":"", >> "strength":"500 mg" >> }], >> "associatedDrug#2":[{ >> "name":"somethingElse", >> "dose":"", >> "strength":"500 mg" >> }] >> }] >> }] >> }], >> "labs":[{ >> "" >> }] >> }], >> "Asthma":[{}] >> }] >> } >> -------------- >> { >> "medications":[{ >> "aceInhibitors":[{ >> "name":"lisinopril", >> "strength":"10 mg Tab", >> "dose":"1 tab", >> "route":"PO", >> "sig":"daily", >> "pillCount":"#90", >> "refills":"Refill 3" >> }], >> "antianginal":[{ >> "name":"nitroglycerin", >> "strength":"0.4 mg Sublingual Tab", >> "dose":"1 tab", >> "route":"SL", >> "sig":"q15min PRN", >> "pillCount":"#30", >> "refills":"Refill 1" >> }], >> "anticoagulants":[{ >> "name":"warfarin sodium", >> "strength":"3 mg Tab", >> "dose":"1 tab", >> "route":"PO", >> "sig":"daily", >> "pillCount":"#90", >> "refills":"Refill 3" >> }], >> "betaBlocker":[{ >> "name":"metoprolol tartrate", >> "strength":"25 mg Tab", >> "dose":"1 tab", >> "route":"PO", >> "sig":"daily", >> "pillCount":"#90", >> "refills":"Refill 3" >> }], >> "diuretic":[{ >> "name":"furosemide", >> "strength":"40 mg Tab", >> "dose":"1 tab", >> "route":"PO", >> "sig":"daily", >> "pillCount":"#90", >> "refills":"Refill 3" >> }], >> "mineral":[{ >> "name":"potassium chloride ER", >> "strength":"10 mEq Tab", >> "dose":"1 tab", >> "route":"PO", >> "sig":"daily", >> "pillCount":"#90", >> "refills":"Refill 3" >> }] >> } >> ], >> "labs":[{ >> "name":"Arterial Blood Gas", >> "time":"Today", >> "location":"Main Hospital Lab" >> }, >> { >> "name":"BMP", >> "time":"Today", >> "location":"Primary Care Clinic" >> }, >> { >> "name":"BNP", >> "time":"3 Weeks", >> "location":"Primary Care Clinic" >> }, >> { >> "name":"BUN", >> "time":"1 Year", >> "location":"Primary Care Clinic" >> }, >> { >> "name":"Cardiac Enzymes", >> "time":"Today", >> "location":"Primary Care Clinic" >> }, >> { >> "name":"CBC", >> "time":"1 Year", >> "location":"Primary Care Clinic" >> }, >> { >> "name":"Creatinine", >> "time":"1 Year", >> "location":"Main Hospital Lab" >> }, >> { >> "name":"Electrolyte Panel", >> "time":"1 Year", >> "location":"Primary Care Clinic" >> }, >> { >> "name":"Glucose", >> "time":"1 Year", >> "location":"Main Hospital Lab" >> }, >> { >> "name":"PT/INR", >> "time":"3 Weeks", >> "location":"Primary Care Clinic" >> }, >> { >> "name":"PTT", >> "time":"3 Weeks", >> "location":"Coumadin Clinic" >> }, >> { >> "name":"TSH", >> "time":"1 Year", >> "location":"Primary Care Clinic" >> } >> ], >> "imaging":[{ >> "name":"Chest X-Ray", >> "time":"Today", >> "location":"Main Hospital Radiology" >> }, >> { >> "name":"Chest X-Ray", >> "time":"Today", >> "location":"Main Hospital Radiology" >> }, >> { >> "name":"Chest X-Ray", >> "time":"Today", >> "location":"Main Hospital Radiology" >> } >> ] >> } >>=20 >> -------------- >>=20 >> { >> "first": "John", >> "skills": [{ >> "Diabetes":[{ >> "medications":[{ >> "medicationsClasses":[{ >> "className":[{ >> "associatedDrug":[{ >> "name":"asprin", >> "dose":"", >> "strength":"500 mg" >> }], >> "associatedDrug#2":[{ >> "name":"somethingElse", >> "dose":"", >> "strength":"500 mg" >> }] >> }], >> "className2":[{ >> "associatedDrug":[{ >> "name":"asprin", >> "dose":"", >> "strength":"500 mg" >> }], >> "associatedDrug#2":[{ >> "name":"somethingElse", >> "dose":"", >> "strength":"500 mg" >> }] >> }] >> }] >> }], >> "labs":[{ >> "" >> }] >> }], >> "Asthma":[{}] >> }] >> } >>=20 >> -------------- >>=20 >> {"widget": { >> "debug": "on", >> "window": { >> "title": "Sample Konfabulator Widget", >> "name": "main_window", >> "width": 500, >> "height": 500 >> }, >> "image": { >> "src": "Images/Sun.png", >> "name": "sun1", >> "hOffset": 250, >> "vOffset": 250, >> "alignment": "center" >> }, >> "text": { >> "data": "Click Here", >> "size": 36, >> "style": "bold", >> "name": "text1", >> "hOffset": 250, >> "vOffset": 100, >> "alignment": "center", >> "onMouseUp": "sun1.opacity =3D (sun1.opacity / 100) * 90;" >> } >> }} >>=20 >> -------------- >>=20 >> { >> "ref":1, >> "glossary": { >> "title": "example glossary", >> "GlossDiv": { >> "title": "S", >> "GlossList": { >> "GlossEntry": { >> "ID": "SGML", >> "SortAs": "SGML", >> "GlossTerm": "Standard = Generalized Markup Language", >> "Acronym": "SGML", >> "Abbrev": "ISO 8879:1986", >> "GlossDef": { >> "para": "A meta-markup language, used to = create markup languages such as DocBook.", >> "GlossSeeAlso": ["GML", = "XML"] >> }, >> "GlossSee": "markup" >> } >> } >> } >> } >> } >>=20 >> -------------- >>=20 >> {"web-app": { >> "servlet": [ >> { >> "servlet-name": "cofaxCDS", >> "servlet-class": "org.cofax.cds.CDSServlet", >> "init-param": { >> "configGlossary:installationAt": "Philadelphia, PA", >> "configGlossary:adminEmail": "ksm@pobox.com", >> "configGlossary:poweredBy": "Cofax", >> "configGlossary:poweredByIcon": "/images/cofax.gif", >> "configGlossary:staticPath": "/content/static", >> "templateProcessorClass": "org.cofax.WysiwygTemplate", >> "templateLoaderClass": "org.cofax.FilesTemplateLoader", >> "templatePath": "templates", >> "templateOverridePath": "", >> "defaultListTemplate": "listTemplate.htm", >> "defaultFileTemplate": "articleTemplate.htm", >> "useJSP": false, >> "jspListTemplate": "listTemplate.jsp", >> "jspFileTemplate": "articleTemplate.jsp", >> "cachePackageTagsTrack": 200, >> "cachePackageTagsStore": 200, >> "cachePackageTagsRefresh": 60, >> "cacheTemplatesTrack": 100, >> "cacheTemplatesStore": 50, >> "cacheTemplatesRefresh": 15, >> "cachePagesTrack": 200, >> "cachePagesStore": 100, >> "cachePagesRefresh": 10, >> "cachePagesDirtyRead": 10, >> "searchEngineListTemplate": "forSearchEnginesList.htm", >> "searchEngineFileTemplate": "forSearchEngines.htm", >> "searchEngineRobotsDb": "WEB-INF/robots.db", >> "useDataStore": true, >> "dataStoreClass": "org.cofax.SqlDataStore", >> "redirectionClass": "org.cofax.SqlRedirection", >> "dataStoreName": "cofax", >> "dataStoreDriver": = "com.microsoft.jdbc.sqlserver.SQLServerDriver", >> "dataStoreUrl": = "jdbc:microsoft:sqlserver://LOCALHOST:1433;DatabaseName=3Dgoon", >> "dataStoreUser": "sa", >> "dataStorePassword": "dataStoreTestQuery", >> "dataStoreTestQuery": "SET NOCOUNT ON;select test=3D'test';", >> "dataStoreLogFile": "/usr/local/tomcat/logs/datastore.log", >> "dataStoreInitConns": 10, >> "dataStoreMaxConns": 100, >> "dataStoreConnUsageLimit": 100, >> "dataStoreLogLevel": "debug", >> "maxUrlLength": 500}}, >> { >> "servlet-name": "cofaxEmail", >> "servlet-class": "org.cofax.cds.EmailServlet", >> "init-param": { >> "mailHost": "mail1", >> "mailHostOverride": "mail2"}}, >> { >> "servlet-name": "cofaxAdmin", >> "servlet-class": "org.cofax.cds.AdminServlet"}, >> { >> "servlet-name": "fileServlet", >> "servlet-class": "org.cofax.cds.FileServlet"}, >> { >> "servlet-name": "cofaxTools", >> "servlet-class": "org.cofax.cms.CofaxToolsServlet", >> "init-param": { >> "templatePath": "toolstemplates/", >> "log": 1, >> "logLocation": "/usr/local/tomcat/logs/CofaxTools.log", >> "logMaxSize": "", >> "dataLog": 1, >> "dataLogLocation": "/usr/local/tomcat/logs/dataLog.log", >> "dataLogMaxSize": "", >> "removePageCache": "/content/admin/remove?cache=3Dpages&id=3D",= >> "removeTemplateCache": = "/content/admin/remove?cache=3Dtemplates&id=3D", >> "fileTransferFolder": = "/usr/local/tomcat/webapps/content/fileTransferFolder", >> "lookInContext": 1, >> "adminGroupID": 4, >> "betaServer": true}}], >> "servlet-mapping": { >> "cofaxCDS": "/", >> "cofaxEmail": "/cofaxutil/aemail/*", >> "cofaxAdmin": "/admin/*", >> "fileServlet": "/static/*", >> "cofaxTools": "/tools/*"}, >> "taglib": { >> "taglib-uri": "cofax.tld", >> "taglib-location": "/WEB-INF/tlds/cofax.tld"}}} >> -------------- >>=20 >>=20 >> { >> "firstName": "John", >> "lastName": "Smith", >> "isAlive": true, >> "age": 25, >> "height_cm": 167.6, >> "address": { >> "streetAddress": "21 2nd Street", >> "city": "New York", >> "state": "NY", >> "postalCode": "10021-3100" >> }, >> "phoneNumbers": [ >> { >> "type": "home", >> "number": "212 555-1234" >> }, >> { >> "type": "office", >> "number": "646 555-4567" >> } >> ], >> "children": [], >> "spouse": null >> } >>=20 >> -------------- >>=20 >> {"menu": { >> "id": "file", >> "value": "File", >> "popup": { >> "menuitem": [ >> {"value": "New", "onclick": "CreateNewDoc()"}, >> {"value": "Open", "onclick": "OpenDoc()"}, >> {"value": "Close", "onclick": "CloseDoc()"} >> ] >> } >> }} >>=20 >> -------------- >>=20 >> {"menu": { >> "header": "SVG Viewer", >> "items": [ >> {"id": "Open"}, >> {"id": "OpenNew", "label": "Open New"}, >> null, >> {"id": "ZoomIn", "label": "Zoom In"}, >> {"id": "ZoomOut", "label": "Zoom Out"}, >> {"id": "OriginalView", "label": "Original View"}, >> null, >> {"id": "Quality"}, >> {"id": "Pause"}, >> {"id": "Mute"}, >> null, >> {"id": "Find", "label": "Find..."}, >> {"id": "FindAgain", "label": "Find Again"}, >> {"id": "Copy"}, >> {"id": "CopyAgain", "label": "Copy Again"}, >> {"id": "CopySVG", "label": "Copy SVG"}, >> {"id": "ViewSVG", "label": "View SVG"}, >> {"id": "ViewSource", "label": "View Source"}, >> {"id": "SaveAs", "label": "Save As"}, >> null, >> {"id": "Help"}, >> {"id": "About", "label": "About Adobe CVG Viewer..."} >> ] >> }} >>=20 >> -------------- >>=20 >> [/!] >>=20 >> { >> "ref":1, >> "glossary": { >> "title": "example glossary", >> "GlossDiv": { >> "title": "S", >> "GlossList": { >> "GlossEntry": { >> "ID": "SGML", >> "SortAs": "SGML", >> "GlossTerm": "Standard = Generalized Markup Language", >> "Acronym": "SGML", >> "Abbrev": "ISO 8879:1986", >> "GlossDef": { >> "para": "A meta-markup language, used to = create markup languages such as DocBook.", >> "GlossSeeAlso": ["GML", = "XML"] >> }, >> "GlossSee": "markup" >> } >> } >> } >> } >> } >>=20 >> -------------- >>=20 >>=20 >> { "PONumber" : 1600, >> "Reference" : "ABULL-20140421", >> "Requestor" : "Alexis Bull", >> "User" : "ABULL", >> "CostCenter" : "A50", >> "ShippingInstructions" : { "name" : "Alexis Bull", >> "Address": { "street" : "200 Sporting = Green", >> "city" : "South San = Francisco", >> "state" : "CA", >> "zipCode" : 99236, >> "country" : "United States = of America" }, >> "Phone" : [ { "type" : "Office", = "number" : "909-555-7307" }, >> { "type" : "Mobile", = "number" : "415-555-1234" } ] }, >> "Special Instructions" : null, >> "AllowPartialShipment" : false, >> "LineItems" : [ { "ItemNumber" : 1, >> "Part" : { "Description" : "One = Magic Christmas", >> "UnitPrice" : = 19.95, >> "UPCCode" : = 13131092899 }, >> "Quantity" : 9.0 }, >> { "ItemNumber" : 2, >> "Part" : { "Description" : = "Lethal Weapon", >> "UnitPrice" : = 19.95, >> "UPCCode" : = 85391628927 }, >> "Quantity" : 5.0 } ] } >>=20 >> -------------- >>=20 >>=20 >> The new cell will be available with the fastCGI next week, OSX and = linux (64bit) versions. >> We will be interest to read your comments about it and to listen to = your ideas, your needs or your comments. >>=20 >> - chris >>=20 >>=20 >>=20 >>=20 >> --------------------------------------------------------- >> This message is sent to you because you are subscribed to >> the mailing list . >> To unsubscribe, E-mail to: >> archives: http://mail.webdna.us/list/talk@webdna.us >> Bug Reporting: support@webdna.us >>=20 >=20 > --=20 > Jym Duane - CTO - Purpose Media > Creating Your Success Story > Marketing : Television - Internet -Print > Phone: (877) 443-1323 > Email: jym@purposemedia.com > Web: www.purposemedia.com >=20 > Oregon - www.GuideToOregon.com > PO Box 1725, Jacksonville, OR 97530 >=20 > California - www.OrangeCounty.net > PO Box 2025, Capistrano Beach, CA 92624 >=20 >=20 >=20 > --------------------------------------------------------- > This message is sent to you because you are subscribed to > the mailing list . > To unsubscribe, E-mail to: > archives: http://mail.webdna.us/list/talk@webdna.us > Bug Reporting: support@webdna.us Associated Messages, from the most recent to the oldest:

    
  1. Re: [WebDNA] JSON objects and [JSONstore]: new cell (christophe.billiottet@webdna.us 2014)
  2. Re: [WebDNA] JSON objects and [JSONstore]: new cell (Jym Duane 2014)
  3. [WebDNA] JSON objects and [JSONstore]: new cell (christophe.billiottet@webdna.us 2014)
The new [JSONstore] is available on the v.8 fastCGI version for linux = and OSX. http://www.webdna.us/page.dna?numero=3D307 - chris On Sep 25, 2014, at 22:00, Jym Duane wrote: > looks like an excellent addition. >=20 > jym >=20 >=20 > On 9/25/2014 5:07 AM, christophe.billiottet@webdna.us wrote: >> Because more and more websites are relying on javascript (browser = side), we have decided to give WebDNA a tool to store complex JSON = objects into a flat database. >>=20 >> JSON object and XML format have more or less the same structure, = however XML specification does not match the data model for most = programming languages which makes it slow and tedious for programmers to = parse. Compared to JSON, XML has a low data-to-markup ratio which = results in it being more difficult for humans to read and write. JSON = standard is language-independent and its data structures, arrays and = objects, are universally recognized. These structures are supported in = some way by nearly all modern programming languages and are familiar to = nearly all programmers. These qualities make it an ideal format for data = interchange on the web. It handles different types of data: numbers, = strings, boolean, arrays=85 The problem relies in JSON objects structure = that can be complicated to handle as it can include other nested = objects, arrays, arrays with objects, objects with nested arrays, = objects with nested objects, object with nested arrays and objects=85 a = number of structures that are difficult to recognize and parse and even = more complicated to store. >>=20 >> The no-sql is one answer. I already explained here how to use WebDNA = as no-sql database, each JSON object being stored as a text file indexed = into a WebDNA database. >>=20 >> We went one step further and built a new tag, a =93cell=94 = [JSONstore] that can analyze, recognize, parse and store JSON object = into our usual WebDNA flat database. We made it solid and = stucture-independant. >>=20 >> So, let=92s see an example of a JSON Object with a nested array; this = should not be too difficult for a human to read >>=20 >> var myObject =3D { >> "first": "John", >> "last": "Doe", >> "age": 39, >> "interests": [ "Reading", "Mountain Biking", "Hacking" ], >> "favorites": { >> "color": "Blue", >> "sport": "Soccer", >> "food": "Spaghetti" >> }, >> "skills": [ >> { >> "category": "JavaScript", >> "tests": [ >> { "name": "One", "score": 90 }, >> { "name": "Two", "score": 96 } >> ] >> }, >> { >> "category": "CouchDB", >> "tests": [ >> { "name": "One", "score": 79 }, >> { "name": "Two", "score": 84 } >> ] >> }, >> { >> =93category": "WebDNA", >> "tests": [ >> { "name": "One", "score": 97 }, >> { "name": "Two", "score": 93 } >> ] >> } >> ] >> } >>=20 >>=20 >>=20 >>=20 >> We will make WebDNA store it in a flat database: simple data go the = usual way, like >>=20 >> first=3DJohn >> last=3DDoe >> age=3D39 >>=20 >> arrays will have a field with =93:array=94 appended to the field name = so WebDNA knows it is an array and that the content should not be = parsed. >>=20 >> interests:array=3D=93Reading=94,=93Mountain Biking=94,=93Hacking=94 >>=20 >> skills:array=3D{=93category=94:=94JavaScript=94,=94tests=94:[{=93name=94= :=94One", "score":90},{"name": "Two", "score": 96 = }]},{"category":"CouchDB","tests":[{"name":"One","score":79},{"name":"Two"= ,"score":84 }]}, = {=93category":"WebDNA",=93tests=94:[{"name":"One","score":97},{"name":"Two= ","score":93} >>=20 >> nested objects will be parsed and stored by appending the second = level field name to the first one, separated by a colon >>=20 >> favorites:color=3Dblue >> favorite:sport=3DSoccer >> favorite:food=3DSpaghetti >>=20 >>=20 >>=20 >> So, how to do that? first by preparing your database: it will include = these fields >>=20 >> firstlastageinterests:arrayfavorites:color= favorite:sport favorite:food skills:array >>=20 >> Then, using the new cell [JSONstore] and the database name >>=20 >> [JSONstore db=3Dwhatever.db] >> >> [/JSONstore] >>=20 >> (a debug=3Don option is available to know exactly what and how it is = stored) >>=20 >> by replacing by the actual object, the cell [JSONstore] = will populate the database like this, automatically >>=20 >> first=3DJohn >> last=3DDoe >> age=3D39 >> interests:array=3D=93Reading=94, =93Mountain Biking", "Hacking" >> favorites:color=3DBlue >> favorites:sport=3DSoccer >> favorites:food=3DSpaghetti >> skills:array=3D{ "category": "JavaScript", "tests": [ { "name": = "One", "score": 90 }, { "name": "Two", "score": 96 } ] }, { "category": = "CouchDB", "tests": [ { "name": "One", "score": 79 }, { "name": "Two", = "score": 84 } ] }, { "category": "WebDNA", "tests": [ { "name": "One", = "score": 97 }, { "name": "Two", "score": 93 } ] } >>=20 >> Sorting the data to recompose the original object is straightforward >>=20 >> { >> =93first=94: =93[first]", >> =93last=94: "[last]", >> =93interests=94: [interest:array], >> "favorites": { >> =93color=94: =93[favorite:color]=94, >> =93food=94: =93[favorite:food]" >> =93sport=94: =93[favorite:sport]" >> } >> =93skills=94: [skills:array] >> } >>=20 >>=20 >> JQUERY, for instance, will work well with it. >>=20 >> This has been tested against the following examples, some of them = being somewhat difficult to work with. >>=20 >>=20 >>=20 >>=20 >> -------------- >> { "accounting" : [ >> { "firstName" : "John", >> "lastName" : "Doe", >> "age" : 23 }, >> { "firstName" : "Mary", >> "lastName" : "Smith", >> "age" : 32 } >> ], >> "sales" : [ >> { "firstName" : "Sally", >> "lastName" : "Green", >> "age" : 27 }, >> { "firstName" : "Jim", >> "lastName" : "Galley", >> "age" : 41 } >> ] >> } >> -------------- >> { >> "problems": [{ >> "Diabetes":[{ >> "medications":[{ >> "medicationsClasses":[{ >> "className":[{ >> "associatedDrug":[{ >> "name":"asprin", >> "dose":"", >> "strength":"500 mg" >> }], >> "associatedDrug#2":[{ >> "name":"somethingElse", >> "dose":"", >> "strength":"500 mg" >> }] >> }], >> "className2":[{ >> "associatedDrug":[{ >> "name":"asprin", >> "dose":"", >> "strength":"500 mg" >> }], >> "associatedDrug#2":[{ >> "name":"somethingElse", >> "dose":"", >> "strength":"500 mg" >> }] >> }] >> }] >> }], >> "labs":[{ >> "" >> }] >> }], >> "Asthma":[{}] >> }] >> } >> -------------- >> { >> "medications":[{ >> "aceInhibitors":[{ >> "name":"lisinopril", >> "strength":"10 mg Tab", >> "dose":"1 tab", >> "route":"PO", >> "sig":"daily", >> "pillCount":"#90", >> "refills":"Refill 3" >> }], >> "antianginal":[{ >> "name":"nitroglycerin", >> "strength":"0.4 mg Sublingual Tab", >> "dose":"1 tab", >> "route":"SL", >> "sig":"q15min PRN", >> "pillCount":"#30", >> "refills":"Refill 1" >> }], >> "anticoagulants":[{ >> "name":"warfarin sodium", >> "strength":"3 mg Tab", >> "dose":"1 tab", >> "route":"PO", >> "sig":"daily", >> "pillCount":"#90", >> "refills":"Refill 3" >> }], >> "betaBlocker":[{ >> "name":"metoprolol tartrate", >> "strength":"25 mg Tab", >> "dose":"1 tab", >> "route":"PO", >> "sig":"daily", >> "pillCount":"#90", >> "refills":"Refill 3" >> }], >> "diuretic":[{ >> "name":"furosemide", >> "strength":"40 mg Tab", >> "dose":"1 tab", >> "route":"PO", >> "sig":"daily", >> "pillCount":"#90", >> "refills":"Refill 3" >> }], >> "mineral":[{ >> "name":"potassium chloride ER", >> "strength":"10 mEq Tab", >> "dose":"1 tab", >> "route":"PO", >> "sig":"daily", >> "pillCount":"#90", >> "refills":"Refill 3" >> }] >> } >> ], >> "labs":[{ >> "name":"Arterial Blood Gas", >> "time":"Today", >> "location":"Main Hospital Lab" >> }, >> { >> "name":"BMP", >> "time":"Today", >> "location":"Primary Care Clinic" >> }, >> { >> "name":"BNP", >> "time":"3 Weeks", >> "location":"Primary Care Clinic" >> }, >> { >> "name":"BUN", >> "time":"1 Year", >> "location":"Primary Care Clinic" >> }, >> { >> "name":"Cardiac Enzymes", >> "time":"Today", >> "location":"Primary Care Clinic" >> }, >> { >> "name":"CBC", >> "time":"1 Year", >> "location":"Primary Care Clinic" >> }, >> { >> "name":"Creatinine", >> "time":"1 Year", >> "location":"Main Hospital Lab" >> }, >> { >> "name":"Electrolyte Panel", >> "time":"1 Year", >> "location":"Primary Care Clinic" >> }, >> { >> "name":"Glucose", >> "time":"1 Year", >> "location":"Main Hospital Lab" >> }, >> { >> "name":"PT/INR", >> "time":"3 Weeks", >> "location":"Primary Care Clinic" >> }, >> { >> "name":"PTT", >> "time":"3 Weeks", >> "location":"Coumadin Clinic" >> }, >> { >> "name":"TSH", >> "time":"1 Year", >> "location":"Primary Care Clinic" >> } >> ], >> "imaging":[{ >> "name":"Chest X-Ray", >> "time":"Today", >> "location":"Main Hospital Radiology" >> }, >> { >> "name":"Chest X-Ray", >> "time":"Today", >> "location":"Main Hospital Radiology" >> }, >> { >> "name":"Chest X-Ray", >> "time":"Today", >> "location":"Main Hospital Radiology" >> } >> ] >> } >>=20 >> -------------- >>=20 >> { >> "first": "John", >> "skills": [{ >> "Diabetes":[{ >> "medications":[{ >> "medicationsClasses":[{ >> "className":[{ >> "associatedDrug":[{ >> "name":"asprin", >> "dose":"", >> "strength":"500 mg" >> }], >> "associatedDrug#2":[{ >> "name":"somethingElse", >> "dose":"", >> "strength":"500 mg" >> }] >> }], >> "className2":[{ >> "associatedDrug":[{ >> "name":"asprin", >> "dose":"", >> "strength":"500 mg" >> }], >> "associatedDrug#2":[{ >> "name":"somethingElse", >> "dose":"", >> "strength":"500 mg" >> }] >> }] >> }] >> }], >> "labs":[{ >> "" >> }] >> }], >> "Asthma":[{}] >> }] >> } >>=20 >> -------------- >>=20 >> {"widget": { >> "debug": "on", >> "window": { >> "title": "Sample Konfabulator Widget", >> "name": "main_window", >> "width": 500, >> "height": 500 >> }, >> "image": { >> "src": "Images/Sun.png", >> "name": "sun1", >> "hOffset": 250, >> "vOffset": 250, >> "alignment": "center" >> }, >> "text": { >> "data": "Click Here", >> "size": 36, >> "style": "bold", >> "name": "text1", >> "hOffset": 250, >> "vOffset": 100, >> "alignment": "center", >> "onMouseUp": "sun1.opacity =3D (sun1.opacity / 100) * 90;" >> } >> }} >>=20 >> -------------- >>=20 >> { >> "ref":1, >> "glossary": { >> "title": "example glossary", >> "GlossDiv": { >> "title": "S", >> "GlossList": { >> "GlossEntry": { >> "ID": "SGML", >> "SortAs": "SGML", >> "GlossTerm": "Standard = Generalized Markup Language", >> "Acronym": "SGML", >> "Abbrev": "ISO 8879:1986", >> "GlossDef": { >> "para": "A meta-markup language, used to = create markup languages such as DocBook.", >> "GlossSeeAlso": ["GML", = "XML"] >> }, >> "GlossSee": "markup" >> } >> } >> } >> } >> } >>=20 >> -------------- >>=20 >> {"web-app": { >> "servlet": [ >> { >> "servlet-name": "cofaxCDS", >> "servlet-class": "org.cofax.cds.CDSServlet", >> "init-param": { >> "configGlossary:installationAt": "Philadelphia, PA", >> "configGlossary:adminEmail": "ksm@pobox.com", >> "configGlossary:poweredBy": "Cofax", >> "configGlossary:poweredByIcon": "/images/cofax.gif", >> "configGlossary:staticPath": "/content/static", >> "templateProcessorClass": "org.cofax.WysiwygTemplate", >> "templateLoaderClass": "org.cofax.FilesTemplateLoader", >> "templatePath": "templates", >> "templateOverridePath": "", >> "defaultListTemplate": "listTemplate.htm", >> "defaultFileTemplate": "articleTemplate.htm", >> "useJSP": false, >> "jspListTemplate": "listTemplate.jsp", >> "jspFileTemplate": "articleTemplate.jsp", >> "cachePackageTagsTrack": 200, >> "cachePackageTagsStore": 200, >> "cachePackageTagsRefresh": 60, >> "cacheTemplatesTrack": 100, >> "cacheTemplatesStore": 50, >> "cacheTemplatesRefresh": 15, >> "cachePagesTrack": 200, >> "cachePagesStore": 100, >> "cachePagesRefresh": 10, >> "cachePagesDirtyRead": 10, >> "searchEngineListTemplate": "forSearchEnginesList.htm", >> "searchEngineFileTemplate": "forSearchEngines.htm", >> "searchEngineRobotsDb": "WEB-INF/robots.db", >> "useDataStore": true, >> "dataStoreClass": "org.cofax.SqlDataStore", >> "redirectionClass": "org.cofax.SqlRedirection", >> "dataStoreName": "cofax", >> "dataStoreDriver": = "com.microsoft.jdbc.sqlserver.SQLServerDriver", >> "dataStoreUrl": = "jdbc:microsoft:sqlserver://LOCALHOST:1433;DatabaseName=3Dgoon", >> "dataStoreUser": "sa", >> "dataStorePassword": "dataStoreTestQuery", >> "dataStoreTestQuery": "SET NOCOUNT ON;select test=3D'test';", >> "dataStoreLogFile": "/usr/local/tomcat/logs/datastore.log", >> "dataStoreInitConns": 10, >> "dataStoreMaxConns": 100, >> "dataStoreConnUsageLimit": 100, >> "dataStoreLogLevel": "debug", >> "maxUrlLength": 500}}, >> { >> "servlet-name": "cofaxEmail", >> "servlet-class": "org.cofax.cds.EmailServlet", >> "init-param": { >> "mailHost": "mail1", >> "mailHostOverride": "mail2"}}, >> { >> "servlet-name": "cofaxAdmin", >> "servlet-class": "org.cofax.cds.AdminServlet"}, >> { >> "servlet-name": "fileServlet", >> "servlet-class": "org.cofax.cds.FileServlet"}, >> { >> "servlet-name": "cofaxTools", >> "servlet-class": "org.cofax.cms.CofaxToolsServlet", >> "init-param": { >> "templatePath": "toolstemplates/", >> "log": 1, >> "logLocation": "/usr/local/tomcat/logs/CofaxTools.log", >> "logMaxSize": "", >> "dataLog": 1, >> "dataLogLocation": "/usr/local/tomcat/logs/dataLog.log", >> "dataLogMaxSize": "", >> "removePageCache": "/content/admin/remove?cache=3Dpages&id=3D",= >> "removeTemplateCache": = "/content/admin/remove?cache=3Dtemplates&id=3D", >> "fileTransferFolder": = "/usr/local/tomcat/webapps/content/fileTransferFolder", >> "lookInContext": 1, >> "adminGroupID": 4, >> "betaServer": true}}], >> "servlet-mapping": { >> "cofaxCDS": "/", >> "cofaxEmail": "/cofaxutil/aemail/*", >> "cofaxAdmin": "/admin/*", >> "fileServlet": "/static/*", >> "cofaxTools": "/tools/*"}, >> "taglib": { >> "taglib-uri": "cofax.tld", >> "taglib-location": "/WEB-INF/tlds/cofax.tld"}}} >> -------------- >>=20 >>=20 >> { >> "firstName": "John", >> "lastName": "Smith", >> "isAlive": true, >> "age": 25, >> "height_cm": 167.6, >> "address": { >> "streetAddress": "21 2nd Street", >> "city": "New York", >> "state": "NY", >> "postalCode": "10021-3100" >> }, >> "phoneNumbers": [ >> { >> "type": "home", >> "number": "212 555-1234" >> }, >> { >> "type": "office", >> "number": "646 555-4567" >> } >> ], >> "children": [], >> "spouse": null >> } >>=20 >> -------------- >>=20 >> {"menu": { >> "id": "file", >> "value": "File", >> "popup": { >> "menuitem": [ >> {"value": "New", "onclick": "CreateNewDoc()"}, >> {"value": "Open", "onclick": "OpenDoc()"}, >> {"value": "Close", "onclick": "CloseDoc()"} >> ] >> } >> }} >>=20 >> -------------- >>=20 >> {"menu": { >> "header": "SVG Viewer", >> "items": [ >> {"id": "Open"}, >> {"id": "OpenNew", "label": "Open New"}, >> null, >> {"id": "ZoomIn", "label": "Zoom In"}, >> {"id": "ZoomOut", "label": "Zoom Out"}, >> {"id": "OriginalView", "label": "Original View"}, >> null, >> {"id": "Quality"}, >> {"id": "Pause"}, >> {"id": "Mute"}, >> null, >> {"id": "Find", "label": "Find..."}, >> {"id": "FindAgain", "label": "Find Again"}, >> {"id": "Copy"}, >> {"id": "CopyAgain", "label": "Copy Again"}, >> {"id": "CopySVG", "label": "Copy SVG"}, >> {"id": "ViewSVG", "label": "View SVG"}, >> {"id": "ViewSource", "label": "View Source"}, >> {"id": "SaveAs", "label": "Save As"}, >> null, >> {"id": "Help"}, >> {"id": "About", "label": "About Adobe CVG Viewer..."} >> ] >> }} >>=20 >> -------------- >>=20 >> [/!] >>=20 >> { >> "ref":1, >> "glossary": { >> "title": "example glossary", >> "GlossDiv": { >> "title": "S", >> "GlossList": { >> "GlossEntry": { >> "ID": "SGML", >> "SortAs": "SGML", >> "GlossTerm": "Standard = Generalized Markup Language", >> "Acronym": "SGML", >> "Abbrev": "ISO 8879:1986", >> "GlossDef": { >> "para": "A meta-markup language, used to = create markup languages such as DocBook.", >> "GlossSeeAlso": ["GML", = "XML"] >> }, >> "GlossSee": "markup" >> } >> } >> } >> } >> } >>=20 >> -------------- >>=20 >>=20 >> { "PONumber" : 1600, >> "Reference" : "ABULL-20140421", >> "Requestor" : "Alexis Bull", >> "User" : "ABULL", >> "CostCenter" : "A50", >> "ShippingInstructions" : { "name" : "Alexis Bull", >> "Address": { "street" : "200 Sporting = Green", >> "city" : "South San = Francisco", >> "state" : "CA", >> "zipCode" : 99236, >> "country" : "United States = of America" }, >> "Phone" : [ { "type" : "Office", = "number" : "909-555-7307" }, >> { "type" : "Mobile", = "number" : "415-555-1234" } ] }, >> "Special Instructions" : null, >> "AllowPartialShipment" : false, >> "LineItems" : [ { "ItemNumber" : 1, >> "Part" : { "Description" : "One = Magic Christmas", >> "UnitPrice" : = 19.95, >> "UPCCode" : = 13131092899 }, >> "Quantity" : 9.0 }, >> { "ItemNumber" : 2, >> "Part" : { "Description" : = "Lethal Weapon", >> "UnitPrice" : = 19.95, >> "UPCCode" : = 85391628927 }, >> "Quantity" : 5.0 } ] } >>=20 >> -------------- >>=20 >>=20 >> The new cell will be available with the fastCGI next week, OSX and = linux (64bit) versions. >> We will be interest to read your comments about it and to listen to = your ideas, your needs or your comments. >>=20 >> - chris >>=20 >>=20 >>=20 >>=20 >> --------------------------------------------------------- >> This message is sent to you because you are subscribed to >> the mailing list . >> To unsubscribe, E-mail to: >> archives: http://mail.webdna.us/list/talk@webdna.us >> Bug Reporting: support@webdna.us >>=20 >=20 > --=20 > Jym Duane - CTO - Purpose Media > Creating Your Success Story > Marketing : Television - Internet -Print > Phone: (877) 443-1323 > Email: jym@purposemedia.com > Web: www.purposemedia.com >=20 > Oregon - www.GuideToOregon.com > PO Box 1725, Jacksonville, OR 97530 >=20 > California - www.OrangeCounty.net > PO Box 2025, Capistrano Beach, CA 92624 >=20 >=20 >=20 > --------------------------------------------------------- > This message is sent to you because you are subscribed to > the mailing list . > To unsubscribe, E-mail to: > archives: http://mail.webdna.us/list/talk@webdna.us > Bug Reporting: support@webdna.us christophe.billiottet@webdna.us

DOWNLOAD WEBDNA NOW!

Top Articles:

Talk List

The WebDNA community talk-list is the best place to get some help: several hundred extremely proficient programmers with an excellent knowledge of WebDNA and an excellent spirit will deliver all the tips and tricks you can imagine...

Related Readings:

multi-paragraph fields (1997) Mass Mail (2000) NT Version on IIS 4.0 (1997) New Mac Public Beta Available (1997) showif and cart (1997) fax orders (2003) Authorize.net for dummies (2003) Is the Finder required? (1998) Prices coming up 0.00 (2001) Hyperboard/bulletin board available (1998) Re:quit command on NT (1997) Transferring [cart] to Database (1997) OT (maybe) Setting up local (non internet) test computers (2000) emailer and other smtp (1998) RE: [WebDNA] [OT] the "Work in progress" thread. (2009) Using Plug-In while running 1.6.1 (1997) unable to launch acgi in WebCat (1997) Practice runs ? (1997) Individual LineItemChangePassword files would be better ... (1999) Quitting WebMerchant ? (1997)