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
(Delphi DLL) 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.
uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Hashtable, JsonObject; ... procedure TForm1.Button1Click(Sender: TObject); var json: HCkJsonObject; jsonTemplate: HCkJsonObject; jsonDonut: HCkJsonObject; donutValues: HCkHashtable; omitEmpty: Boolean; begin // One way to create JSON is to do it in a straightforward manner: json := CkJsonObject_Create(); CkJsonObject_putEmitCompact(json,False); CkJsonObject_UpdateString(json,'id','0001'); CkJsonObject_UpdateString(json,'type','donut'); CkJsonObject_UpdateString(json,'name','Cake'); CkJsonObject_UpdateString(json,'image.url','images/0001.jpg'); CkJsonObject_UpdateInt(json,'image.width',200); CkJsonObject_UpdateInt(json,'image.height',200); CkJsonObject_UpdateString(json,'thumbnail.url','images/thumbnails/0001.jpg'); CkJsonObject_UpdateInt(json,'thumbnail.width',32); CkJsonObject_UpdateInt(json,'thumbnail.height',32); Memo1.Lines.Add(CkJsonObject__emit(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 := CkJsonObject_Create(); CkJsonObject_UpdateString(jsonTemplate,'id','{$id}'); CkJsonObject_UpdateString(jsonTemplate,'type','donut'); CkJsonObject_UpdateString(jsonTemplate,'name','{$name}'); CkJsonObject_UpdateString(jsonTemplate,'image.url','{$imageUrl}'); // The "i." indicates that it's an integer variable. CkJsonObject_UpdateString(jsonTemplate,'image.width','{$i.imageWidth}'); CkJsonObject_UpdateString(jsonTemplate,'image.height','{$i.imageHeight}'); CkJsonObject_UpdateString(jsonTemplate,'thumbnail.url','{$thumbUrl}'); CkJsonObject_UpdateString(jsonTemplate,'thumbnail.width','{$i.thumbWidth}'); CkJsonObject_UpdateString(jsonTemplate,'thumbnail.height','{$i.thumbHeight}'); // Give this template a name. CkJsonObject_Predefine(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 := CkJsonObject_Create(); CkJsonObject_putEmitCompact(jsonDonut,False); CkJsonObject_LoadPredefined(jsonDonut,'donut'); Memo1.Lines.Add(CkJsonObject__emit(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 := CkHashtable_Create(); CkHashtable_AddStr(donutValues,'id','0001'); CkHashtable_AddStr(donutValues,'name','Cake'); CkHashtable_AddStr(donutValues,'imageUrl','images/0001.jpg'); CkHashtable_AddInt(donutValues,'imageWidth',200); CkHashtable_AddInt(donutValues,'imageHeight',200); CkHashtable_AddStr(donutValues,'thumbUrl','images/thumbnails/0001.jpg'); CkHashtable_AddInt(donutValues,'thumbWidth',32); CkHashtable_AddInt(donutValues,'thumbHeight',32); // Emit with variable substitutions: omitEmpty := True; Memo1.Lines.Add(CkJsonObject__emitWithSubs(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_AddStr(donutValues,'id','0002'); CkHashtable_AddStr(donutValues,'imageUrl','images/0002.jpg'); CkHashtable_AddStr(donutValues,'thumbUrl','images/thumbnails/0002.jpg'); Memo1.Lines.Add(CkJsonObject__emitWithSubs(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_Dispose(json); CkJsonObject_Dispose(jsonTemplate); CkJsonObject_Dispose(jsonDonut); CkHashtable_Dispose(donutValues); end; |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.