/* Collection of code snippets by Arne Vajhøj */
/* (from articles on eksperten.dk / vajhoej.dk written sometime between 2004 and now) */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "jansson.h"

#define JSON "[ { \"no\" : 1, \"name\" : \"Alan A\", \"role\" : \"Manager\" }, " \
               "{ \"no\" : 2, \"name\" : \"Brian B\", \"role\" : \"Engineer\" }, " \
               "{ \"no\" : 3, \"name\" : \"Chris C\", \"role\" : \"Sales rep\" } ]"

int main()
{
    json_t *employees, *employee, *newemployee;
    json_error_t error;
    const char *name, *role;
    char *s;
    int i, no;
    /* iterate over all employees */
    employees = json_loads(JSON, 0, &error);
    if(!employees)
    {
        printf("Error: %s\n", error.text);
    }
    for(i = 0; i < json_array_size(employees); i++)
    {
        employee = json_array_get(employees, i);
        /* find no, name and role */
        no =  json_integer_value(json_object_get(employee, "no"));
        name =  json_string_value(json_object_get(employee, "name"));
        role =  json_string_value(json_object_get(employee, "role"));
        /* print */
        printf("no = %d\n", no);
        printf("name = %s\n", name);
        printf("role = %s\n", role);
    }
    /* add employee */
    newemployee = json_object();
    json_object_set(newemployee, "no", json_integer(4));
    json_object_set(newemployee, "name", json_string("Dave D"));
    json_object_set(newemployee, "role", json_string("Intern"));
    json_array_append(employees, newemployee);
    /* write out */
    s = json_dumps(employees, 0);
    printf("%s\n", s);
    free(s);
    /* */
    json_decref(employees);
    return 0;
}
