The serializing counterpart to json-parser.
As with json-parser: BSD licensed, almost ANSI C89 apart from a single use of snprintf.
Quick example (docs coming soon):
json_value * arr = json_array_new(0);
json_array_push(arr, json_string_new("Hello world!"));
json_array_push(arr, json_integer_new(128));
char * buf = malloc(json_measure(arr));
json_serialize(buf, arr);
printf("%s\n", buf);[ "Hello world!", 128 ]json-builder is fully interoperable with json-parser:
char json[] = "[ 1, 2, 3 ]";
json_settings settings = {};
settings.value_extra = json_builder_extra; /* space for json-builder state */
char error[128];
json_value * arr = json_parse_ex(&settings, json, strlen(json), error);
/* Now serialize it again. */
char * buf = malloc(json_measure(arr));
json_serialize(buf, arr);
printf("%s\n", buf);[ 1, 2, 3 ]Note that values created by or modified by json-builder must be freed with
json_builder_free instead of json_value_free, otherwise the memory of the
builder state will be leaked.
json_serialize_mode_multiline— Generate multi-line JSON, for example:
[
1,
2,
3
]json_serialize_mode_single_line— Generate JSON on a single line, for example:
[ 1, 2, 3 ]json_serialize_mode_packed— Generate JSON as tightly packed as possible, for example:
[1,2,3]-
json_serialize_opt_CRLF— use CR/LF (Windows) line endings -
json_serialize_opt_pack_brackets— do not leave spaces around brackets (e.g.[ 1, 2 ]becomes[1, 2]) -
json_serialize_opt_no_space_after_comma— do not leave spaces after commas -
json_serialize_opt_no_space_after_colon— do not leave spaces after colons (inside objects) -
json_serialize_opt_use_tabs— indent using tabs instead of spaces when in multi-line mode -
indent_size— the number of tabs or spaces to indent with in multi-line mode