|  | @@ -77,7 +77,7 @@ Want to change the framerate?
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  Back to disk?
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    char * rendered=cJSON_Print(root);
 | 
	
		
			
				|  |  | +    char * rendered = cJSON_Print(root);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  Finished? Delete the root (this takes care of everything else).
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -89,12 +89,12 @@ before you dereference them. If you want to see how you'd build this struct in c
 | 
	
		
			
				|  |  |      cJSON *root,*fmt;
 | 
	
		
			
				|  |  |      root = cJSON_CreateObject();  
 | 
	
		
			
				|  |  |      cJSON_AddItemToObject(root, "name", cJSON_CreateString("Jack (\"Bee\") Nimble"));
 | 
	
		
			
				|  |  | -    cJSON_AddItemToObject(root, "format", fmt=cJSON_CreateObject());
 | 
	
		
			
				|  |  | -    cJSON_AddStringToObject(fmt,"type", "rect");
 | 
	
		
			
				|  |  | -    cJSON_AddNumberToObject(fmt,"width", 1920);
 | 
	
		
			
				|  |  | -    cJSON_AddNumberToObject(fmt,"height", 1080);
 | 
	
		
			
				|  |  | -    cJSON_AddFalseToObject (fmt,"interlace");
 | 
	
		
			
				|  |  | -    cJSON_AddNumberToObject(fmt,"frame rate", 24);
 | 
	
		
			
				|  |  | +    cJSON_AddItemToObject(root, "format", fmt = cJSON_CreateObject());
 | 
	
		
			
				|  |  | +    cJSON_AddStringToObject(fmt, "type", "rect");
 | 
	
		
			
				|  |  | +    cJSON_AddNumberToObject(fmt, "width", 1920);
 | 
	
		
			
				|  |  | +    cJSON_AddNumberToObject(fmt, "height", 1080);
 | 
	
		
			
				|  |  | +    cJSON_AddFalseToObject (fmt, "interlace");
 | 
	
		
			
				|  |  | +    cJSON_AddNumberToObject(fmt, "frame rate", 24);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  Hopefully we can agree that's not a lot of code? There's no overhead, no unnecessary setup.
 | 
	
		
			
				|  |  |  Look at test.c for a bunch of nice examples, mostly all ripped off the json.org site, and
 | 
	
	
		
			
				|  | @@ -156,11 +156,11 @@ you'd do it (just an example, since these things are very specific):
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  |        while (item)
 | 
	
		
			
				|  |  |        {
 | 
	
		
			
				|  |  | -        char *newprefix=malloc(strlen(prefix)+strlen(item->name)+2);
 | 
	
		
			
				|  |  | +        char *newprefix = malloc(strlen(prefix) + strlen(item->name) + 2);
 | 
	
		
			
				|  |  |          sprintf(newprefix,"%s/%s",prefix,item->name);
 | 
	
		
			
				|  |  | -        int dorecurse=callback(newprefix, item->type, item);
 | 
	
		
			
				|  |  | -        if (item->child && dorecurse) parse_and_callback(item->child,newprefix);
 | 
	
		
			
				|  |  | -        item=item->next;
 | 
	
		
			
				|  |  | +        int dorecurse = callback(newprefix, item->type, item);
 | 
	
		
			
				|  |  | +        if (item->child && dorecurse) parse_and_callback(item->child, newprefix);
 | 
	
		
			
				|  |  | +        item = item->next;
 | 
	
		
			
				|  |  |          free(newprefix);
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -185,24 +185,25 @@ You'd use:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      void parse_object(cJSON *item)
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  | -      int i; for (i=0;i<cJSON_GetArraySize(item);i++)
 | 
	
		
			
				|  |  | +      int i;
 | 
	
		
			
				|  |  | +      for (i = 0 ; i < cJSON_GetArraySize(item) ; i++)
 | 
	
		
			
				|  |  |        {
 | 
	
		
			
				|  |  | -        cJSON *subitem=cJSON_GetArrayItem(item,i);
 | 
	
		
			
				|  |  | +        cJSON * subitem = cJSON_GetArrayItem(item, i);
 | 
	
		
			
				|  |  |          // handle subitem.  
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  Or, for PROPER manual mode:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    void parse_object(cJSON *item)
 | 
	
		
			
				|  |  | +    void parse_object(cJSON * item)
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  | -      cJSON *subitem=item->child;
 | 
	
		
			
				|  |  | +      cJSON *subitem = item->child;
 | 
	
		
			
				|  |  |        while (subitem)
 | 
	
		
			
				|  |  |        {
 | 
	
		
			
				|  |  |          // handle subitem
 | 
	
		
			
				|  |  |          if (subitem->child) parse_object(subitem->child);
 | 
	
		
			
				|  |  |      
 | 
	
		
			
				|  |  | -        subitem=subitem->next;
 | 
	
		
			
				|  |  | +        subitem = subitem->next;
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -217,21 +218,22 @@ You can, of course, hand your sub-objects to other functions to populate.
 | 
	
		
			
				|  |  |  Also, if you find a use for it, you can manually build the objects.
 | 
	
		
			
				|  |  |  For instance, suppose you wanted to build an array of objects?
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    cJSON *objects[24];
 | 
	
		
			
				|  |  | +    cJSON * objects[24];
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    cJSON *Create_array_of_anything(cJSON **items,int num)
 | 
	
		
			
				|  |  | +    cJSON * Create_array_of_anything(cJSON ** items, int num)
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  | -      int i;cJSON *prev, *root=cJSON_CreateArray();
 | 
	
		
			
				|  |  | -      for (i=0;i<24;i++)
 | 
	
		
			
				|  |  | +      int i;
 | 
	
		
			
				|  |  | +      cJSON * prev, * root = cJSON_CreateArray();
 | 
	
		
			
				|  |  | +      for (i = 0 ; i < 24 ; i++)
 | 
	
		
			
				|  |  |        {
 | 
	
		
			
				|  |  | -        if (!i)  root->child=objects[i];
 | 
	
		
			
				|  |  | -        else  prev->next=objects[i], objects[i]->prev=prev;
 | 
	
		
			
				|  |  | -        prev=objects[i];
 | 
	
		
			
				|  |  | +        if (!i) root->child = objects[i];
 | 
	
		
			
				|  |  | +        else prev->next = objects[i], objects[i]->prev = prev;
 | 
	
		
			
				|  |  | +        prev = objects[i];
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |        return root;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    
 | 
	
		
			
				|  |  | -and simply: Create_array_of_anything(objects,24);
 | 
	
		
			
				|  |  | +and simply: Create_array_of_anything(objects, 24);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  cJSON doesn't make any assumptions about what order you create things in.
 | 
	
		
			
				|  |  |  You can attach the objects, as above, and later add children to each
 |