DataFlex
DataFlex
Using Pre-defined JSON Templates
See more JSON Examples
Demonstrates 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.
Chilkat DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Handle hoJson
Boolean iSuccess
Handle hoJsonTemplate
Donut Handle hoJsonDonut
Variant vDonutValues
Handle hoDonutValues
Boolean iOmitEmpty
String sTemp1
// One way to create JSON is to do it in a straightforward manner:
Get Create (RefClass(cComChilkatJsonObject)) To hoJson
If (Not(IsComObjectCreated(hoJson))) Begin
Send CreateComObject of hoJson
End
Set ComEmitCompact Of hoJson To False
Get ComUpdateString Of hoJson "id" "0001" To iSuccess
Get ComUpdateString Of hoJson "type" "donut" To iSuccess
Get ComUpdateString Of hoJson "name" "Cake" To iSuccess
Get ComUpdateString Of hoJson "image.url" "images/0001.jpg" To iSuccess
Get ComUpdateInt Of hoJson "image.width" 200 To iSuccess
Get ComUpdateInt Of hoJson "image.height" 200 To iSuccess
Get ComUpdateString Of hoJson "thumbnail.url" "images/thumbnails/0001.jpg" To iSuccess
Get ComUpdateInt Of hoJson "thumbnail.width" 32 To iSuccess
Get ComUpdateInt Of hoJson "thumbnail.height" 32 To iSuccess
Get ComEmit Of hoJson To sTemp1
Showln sTemp1
// 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:
Get Create (RefClass(cComChilkatJsonObject)) To hoJsonTemplate
If (Not(IsComObjectCreated(hoJsonTemplate))) Begin
Send CreateComObject of hoJsonTemplate
End
Get ComUpdateString Of hoJsonTemplate "id" "{$id}" To iSuccess
Get ComUpdateString Of hoJsonTemplate "type" "donut" To iSuccess
Get ComUpdateString Of hoJsonTemplate "name" "{$name}" To iSuccess
Get ComUpdateString Of hoJsonTemplate "image.url" "{$imageUrl}" To iSuccess
// The "i." indicates that it's an integer variable.
Get ComUpdateString Of hoJsonTemplate "image.width" "{$i.imageWidth}" To iSuccess
Get ComUpdateString Of hoJsonTemplate "image.height" "{$i.imageHeight}" To iSuccess
Get ComUpdateString Of hoJsonTemplate "thumbnail.url" "{$thumbUrl}" To iSuccess
Get ComUpdateString Of hoJsonTemplate "thumbnail.width" "{$i.thumbWidth}" To iSuccess
Get ComUpdateString Of hoJsonTemplate "thumbnail.height" "{$i.thumbHeight}" To iSuccess
// Give this template a name.
Get ComPredefine Of hoJsonTemplate "donut" To iSuccess
// --------------------------------------------------------------------------
// 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:
Get Create (RefClass(cComChilkatJsonObject)) To hoJsonDonut
If (Not(IsComObjectCreated(hoJsonDonut))) Begin
Send CreateComObject of hoJsonDonut
End
Set ComEmitCompact Of hoJsonDonut To False
Get ComLoadPredefined Of hoJsonDonut "donut" To iSuccess
Get ComEmit Of hoJsonDonut To sTemp1
Showln sTemp1
// 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:
Get Create (RefClass(cComChilkatHashtable)) To hoDonutValues
If (Not(IsComObjectCreated(hoDonutValues))) Begin
Send CreateComObject of hoDonutValues
End
Get ComAddStr Of hoDonutValues "id" "0001" To iSuccess
Get ComAddStr Of hoDonutValues "name" "Cake" To iSuccess
Get ComAddStr Of hoDonutValues "imageUrl" "images/0001.jpg" To iSuccess
Get ComAddInt Of hoDonutValues "imageWidth" 200 To iSuccess
Get ComAddInt Of hoDonutValues "imageHeight" 200 To iSuccess
Get ComAddStr Of hoDonutValues "thumbUrl" "images/thumbnails/0001.jpg" To iSuccess
Get ComAddInt Of hoDonutValues "thumbWidth" 32 To iSuccess
Get ComAddInt Of hoDonutValues "thumbHeight" 32 To iSuccess
// Emit with variable substitutions:
Move True To iOmitEmpty
Get ComEmitWithSubs Of hoJsonDonut Get pvComObject of hoDonutValues to vDonutValues
vDonutValues iOmitEmpty To sTemp1
Showln sTemp1
// 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:
Get ComAddStr Of hoDonutValues "id" "0002" To iSuccess
Get ComAddStr Of hoDonutValues "imageUrl" "images/0002.jpg" To iSuccess
Get ComAddStr Of hoDonutValues "thumbUrl" "images/thumbnails/0002.jpg" To iSuccess
Get ComEmitWithSubs Of hoJsonDonut Get pvComObject of hoDonutValues to vDonutValues
vDonutValues iOmitEmpty To sTemp1
Showln sTemp1
// 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
// }
// }
End_Procedure