Sample code for 30+ languages & platforms
Dart

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 Dart Downloads

Dart
import 'package:chilkat/chilkat.dart';

void main() {
  // One way to create JSON is to do it in a straightforward manner:
  final json = CkJsonObject();
  json.emitCompact = false;
  json.updateString('id', '0001');
  json.updateString('type', 'donut');
  json.updateString('name', 'Cake');
  json.updateString('image.url', 'images/0001.jpg');
  json.updateInt('image.width', 200);
  json.updateInt('image.height', 200);
  json.updateString('thumbnail.url', 'images/thumbnails/0001.jpg');
  json.updateInt('thumbnail.width', 32);
  json.updateInt('thumbnail.height', 32);
  print(json.emit());

  // 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:

  final jsonTemplate = CkJsonObject();
  jsonTemplate.updateString('id', '{\$id}');
  jsonTemplate.updateString('type', 'donut');
  jsonTemplate.updateString('name', '{\$name}');
  jsonTemplate.updateString('image.url', '{\$imageUrl}');
  // The "i." indicates that it's an integer variable.
  jsonTemplate.updateString('image.width', '{\$i.imageWidth}');
  jsonTemplate.updateString('image.height', '{\$i.imageHeight}');
  jsonTemplate.updateString('thumbnail.url', '{\$thumbUrl}');
  jsonTemplate.updateString('thumbnail.width', '{\$i.thumbWidth}');
  jsonTemplate.updateString('thumbnail.height', '{\$i.thumbHeight}');
  // Give this template a name.
  jsonTemplate.predefine('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:
  final jsonDonut = CkJsonObject();
  jsonDonut.emitCompact = false;
  jsonDonut.loadPredefined('donut');
  print(jsonDonut.emit());

  // 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:
  final donutValues = CkHashtable();
  donutValues.addStr('id', '0001');
  donutValues.addStr('name', 'Cake');
  donutValues.addStr('imageUrl', 'images/0001.jpg');
  donutValues.addInt('imageWidth', 200);
  donutValues.addInt('imageHeight', 200);
  donutValues.addStr('thumbUrl', 'images/thumbnails/0001.jpg');
  donutValues.addInt('thumbWidth', 32);
  donutValues.addInt('thumbHeight', 32);

  // Emit with variable substitutions:
  final omitEmpty = true;
  print(jsonDonut.emitWithSubs(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:
  donutValues.addStr('id', '0002');
  donutValues.addStr('imageUrl', 'images/0002.jpg');
  donutValues.addStr('thumbUrl', 'images/thumbnails/0002.jpg');

  print(jsonDonut.emitWithSubs(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
  // 	  }
  // 	}
}