/* 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 "json-builder.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_value *employees, *employee, *newemployee;
    char *s, *name, *role;
    int i, j, no;
    char error[128];
    /* iterate over all employees */
    json_settings settings = {};
    settings.value_extra = json_builder_extra;
    employees = json_parse_ex(&settings, JSON, strlen(JSON), error);
    for(i = 0; i < employees->u.array.length; i++)
    {
        employee = employees->u.array.values[i];
        /* find no, name and role */
        for(j = 0; j < employee->u.object.length; j++)
        {
            if(strcmp(employee->u.object.values[j].name, "no") == 0)
            {
                no = employee->u.object.values[j].value->u.integer;
            }
            if(strcmp(employee->u.object.values[j].name, "name") == 0)
            {
                name = employee->u.object.values[j].value->u.string.ptr;
            }
            if(strcmp(employee->u.object.values[j].name, "role") == 0)
            {
                role = employee->u.object.values[j].value->u.string.ptr;
            }
        }
        /* print */
        printf("no = %d\n", no);
        printf("name = %s\n", name);
        printf("role = %s\n", role);
    }
    /* add employee */
    newemployee = json_object_new(0);
    json_object_push(newemployee, "no", json_integer_new(4));
    json_object_push(newemployee, "name", json_string_new("Dave D"));
    json_object_push(newemployee, "role", json_string_new("Intern"));
    json_array_push(employees, newemployee);
    /* write out */
    s = malloc(json_measure(employees));
    json_serialize(s, employees);
    printf("%s\n", s);
    free(s);
    /* */
    json_builder_free(employees);
    return 0;
}
