Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(PureBasic) Using Pre-defined JSON TemplatesDemonstrates how to predefine a JSON template, and then use it to emit JSON with variable substitutions. Note: This example requires Chilkat v9.5.0.67 or greater.
IncludeFile "CkHashtable.pb" IncludeFile "CkJsonObject.pb" Procedure ChilkatExample() ; One way to create JSON is to do it in a straightforward manner: json.i = CkJsonObject::ckCreate() If json.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkJsonObject::setCkEmitCompact(json, 0) CkJsonObject::ckUpdateString(json,"id","0001") CkJsonObject::ckUpdateString(json,"type","donut") CkJsonObject::ckUpdateString(json,"name","Cake") CkJsonObject::ckUpdateString(json,"image.url","images/0001.jpg") CkJsonObject::ckUpdateInt(json,"image.width",200) CkJsonObject::ckUpdateInt(json,"image.height",200) CkJsonObject::ckUpdateString(json,"thumbnail.url","images/thumbnails/0001.jpg") CkJsonObject::ckUpdateInt(json,"thumbnail.width",32) CkJsonObject::ckUpdateInt(json,"thumbnail.height",32) Debug CkJsonObject::ckEmit(json) ; The JSON created by the above code: ; { ; "id": "0001", ; "type": "donut", ; "name": "Cake", ; "image": { ; "url": "images/0001.jpg", ; "width": 200, ; "height": 200 ; }, ; "thumbnail": { ; "url": "images/thumbnails/0001.jpg", ; "width": 32, ; "height": 32 ; } ; } ; An alternative is to predefine a template, and then use it to emit with variable substitutions. ; For example: jsonTemplate.i = CkJsonObject::ckCreate() If jsonTemplate.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkJsonObject::ckUpdateString(jsonTemplate,"id","{$id}") CkJsonObject::ckUpdateString(jsonTemplate,"type","donut") CkJsonObject::ckUpdateString(jsonTemplate,"name","{$name}") CkJsonObject::ckUpdateString(jsonTemplate,"image.url","{$imageUrl}") ; The "i." indicates that it's an integer variable. CkJsonObject::ckUpdateString(jsonTemplate,"image.width","{$i.imageWidth}") CkJsonObject::ckUpdateString(jsonTemplate,"image.height","{$i.imageHeight}") CkJsonObject::ckUpdateString(jsonTemplate,"thumbnail.url","{$thumbUrl}") CkJsonObject::ckUpdateString(jsonTemplate,"thumbnail.width","{$i.thumbWidth}") CkJsonObject::ckUpdateString(jsonTemplate,"thumbnail.height","{$i.thumbHeight}") ; Give this template a name. CkJsonObject::ckPredefine(jsonTemplate,"donut") ; -------------------------------------------------------------------------- ; OK, the template is defined. Defining a template can be done once ; at the start of your program, and you can discard the jsonTemplate object (it ; doesn't need to stick around..) ; Now we can create instances of the JSON object by name: jsonDonut.i = CkJsonObject::ckCreate() If jsonDonut.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkJsonObject::setCkEmitCompact(jsonDonut, 0) CkJsonObject::ckLoadPredefined(jsonDonut,"donut") Debug CkJsonObject::ckEmit(jsonDonut) ; The output is this: ; { ; "id": "{$id}", ; "type": "donut", ; "name": "{$name}", ; "image": { ; "url": "{$imageUrl}", ; "width": "{$i.imageWidth}", ; "height": "{$i.imageHeight}" ; }, ; "thumbnail": { ; "url": "{$thumbUrl}", ; "width": "{$i.thumbWidth}", ; "height": "{$i.thumbHeight}" ; } ; } ; Finally, we can substitute variables like this: donutValues.i = CkHashtable::ckCreate() If donutValues.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkHashtable::ckAddStr(donutValues,"id","0001") CkHashtable::ckAddStr(donutValues,"name","Cake") CkHashtable::ckAddStr(donutValues,"imageUrl","images/0001.jpg") CkHashtable::ckAddInt(donutValues,"imageWidth",200) CkHashtable::ckAddInt(donutValues,"imageHeight",200) CkHashtable::ckAddStr(donutValues,"thumbUrl","images/thumbnails/0001.jpg") CkHashtable::ckAddInt(donutValues,"thumbWidth",32) CkHashtable::ckAddInt(donutValues,"thumbHeight",32) ; Emit with variable substitutions: omitEmpty.i = 1 Debug CkJsonObject::ckEmitWithSubs(jsonDonut,donutValues,omitEmpty) ; Output: ; { ; "id": "0001", ; "type": "donut", ; "name": "Cake", ; "image": { ; "url": "images/0001.jpg", ; "width": 200, ; "height": 200 ; }, ; "thumbnail": { ; "url": "images/thumbnails/0001.jpg", ; "width": 32, ; "height": 32 ; } ; } ; Change some of the values: CkHashtable::ckAddStr(donutValues,"id","0002") CkHashtable::ckAddStr(donutValues,"imageUrl","images/0002.jpg") CkHashtable::ckAddStr(donutValues,"thumbUrl","images/thumbnails/0002.jpg") Debug CkJsonObject::ckEmitWithSubs(jsonDonut,donutValues,omitEmpty) ; Output: ; { ; "id": "0002", ; "type": "donut", ; "name": "Cake", ; "image": { ; "url": "images/0002.jpg", ; "width": 200, ; "height": 200 ; }, ; "thumbnail": { ; "url": "images/thumbnails/0002.jpg", ; "width": 32, ; "height": 32 ; } ; } CkJsonObject::ckDispose(json) CkJsonObject::ckDispose(jsonTemplate) CkJsonObject::ckDispose(jsonDonut) CkHashtable::ckDispose(donutValues) ProcedureReturn EndProcedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.