Skip to content

Instantly share code, notes, and snippets.

@demoray
Created August 24, 2017 20:41
Show Gist options
  • Save demoray/116d5a79172f47f7009d9dd001ca1ba4 to your computer and use it in GitHub Desktop.
Save demoray/116d5a79172f47f7009d9dd001ca1ba4 to your computer and use it in GitHub Desktop.
Jansson varargs wrapper
#include <stdlib.h>
#include <jansson.h>
size_t json_printf(json_t *obj, const char *format, ...) {
va_list ap;
size_t count = 0;
char *name;
va_start(ap, format);
for (count = 0; *format != '\0'; ++format) {
name = va_arg(ap, char *);
switch (*format) {
case 'i':
json_object_set_new(obj, name, json_integer(va_arg(ap, int)));
count++;
break;
case 's':
json_object_set_new(obj, name, json_string(va_arg(ap, char *)));
count++;
break;
case 'd':
json_object_set_new(obj, name, json_real(va_arg(ap, double)));
count++;
break;
default:
printf("WTF, skipping %s\n", format);
break;
}
}
va_end(ap);
return count;
}
int main(int argc, char **argv) {
int i;
json_t *obj = json_object();
size_t count;
count = json_printf(obj, "isd", "Age", 3, "name", "Brian", "Worth", 3.3);
char *str = json_dumps(obj, 0);
printf("SIZE: %d\nEncoded: %s\n", count, str);
json_decref(obj);
// convert str back into a json_t object
json_error_t err = {0};
obj = json_loads(str, 0, &err);
free(str);
}
$ gcc -l jansson test.c
$ ./a.out
SIZE: 3
Encoded: {"Age": 3, "name": "Brian", "Worth": 3.2999999999999998}
$
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment