Note keys are not escaped. json_printf()
escapes them.
json_printf(&out, "{%Q: %d, x: [%B, %B], y: %Q}", "foo", 123, 0, -1, "hi");
// Result:
// {"foo": 123, "x": [false, true], "y": "hi"}
To print a complex object (for example, serialise a structure into an object),
use %M
format specifier:
struct my_struct { int a, b; } mys = {1,2};
json_printf(&out, "{foo: %M, bar: %d}", print_my_struct, &mys, 3);
// Result:
// {"foo": {"a": 1, "b": 2}, "bar": 3}
int print_my_struct(struct json_out *out, va_list *ap) {
struct my_struct *p = va_arg(*ap, struct my_struct *);
return json_printf(out, "{a: %d, b: %d}", p->a, p->b);
}