/* 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 "cJSON.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()
{
    cJSON *employees, *employee, *newemployee;
    char *s, *name, *role;
    int i, no;
    /* iterate over all employees */
    employees = cJSON_Parse(JSON);
    for(i = 0; i < cJSON_GetArraySize(employees); i++)
    {
        employee = cJSON_GetArrayItem(employees, i);
        /* find no, name and role */
        no = cJSON_GetObjectItem(employee, "no")->valueint;
        name = cJSON_GetObjectItem(employee, "name")->valuestring;
        role = cJSON_GetObjectItem(employee, "role")->valuestring;
        /* print */
        printf("no = %d\n", no);
        printf("name = %s\n", name);
        printf("role = %s\n", role);
    }
    /* add employee */
    newemployee = cJSON_CreateObject();
    cJSON_AddItemToObject(newemployee, "no",  cJSON_CreateNumber(4));
    cJSON_AddItemToObject(newemployee, "name",  cJSON_CreateString("Dave D"));
    cJSON_AddItemToObject(newemployee, "role",  cJSON_CreateString("Intern"));
    cJSON_AddItemToArray(employees, newemployee);
    /* write out */
    s = cJSON_PrintUnformatted(employees);
    printf("%s\n", s);
    free(s);
    /* */
    cJSON_Delete(employees);
    return 0;
}
