Exemple #1
0
void parse_and_callback(struct ee_fieldbucket *fields, cJSON *item, char *prefix)
{
	char *name;
	char *newprefix;
	int lenprefix;
	int bNeedFree;
	int dorecurse;
//printf("parse_and_callback, item %p, item->string %p, prefix(%d): '%s'\n", item, item->string, strlen(prefix), prefix);
	while (item)
	{
		lenprefix = strlen(prefix);
		if(lenprefix == 0) {
			newprefix = (item->string == NULL) ? "" : item->string;
			bNeedFree = 0;
		} else {
			name = (item->string == NULL) ? "*" : item->string;
			newprefix=malloc(strlen(prefix)+strlen(name)+2);
			sprintf(newprefix,"%s.%s",prefix,name);
			bNeedFree = 1;
		}
		dorecurse = callback(fields, newprefix, item->type, item);
		if (item->child && dorecurse)
			parse_and_callback(fields, item->child,newprefix);
		item=item->next;
		if(bNeedFree)
			free(newprefix);
	}
}
Exemple #2
0
void parse_and_callback(cJSON *item) {

  while(item) {
    printf("type=%d, string=%s valuestring=%s\n",item->type,item->string,item->valuestring);
    if (item->child) parse_and_callback(item->child);
    item = item->next;
  }

}
Exemple #3
0
/* Parse text to JSON, then render back to text, and print! */
void doit(char *text)
{
	char *out;cJSON *json;
	
	json=cJSON_Parse(text);
	if (!json) {printf("Error before: [%s]\n",cJSON_GetErrorPtr());}
	else
	{
	  parse_and_callback(json);
	  // out=cJSON_Print(json);
	  cJSON_Delete(json);
	  // printf("%s\n",out);
	  free(out);
	}
}
Exemple #4
0
struct ee_event*
ee_newEventFromJSON(ee_ctx ctx, char *str)
{
	struct cJSON *json;
	struct ee_event *e = NULL;

	json = cJSON_Parse(str);
	if(json == NULL)
		goto done;
	e = ee_newEvent(ctx);
	e->fields = ee_newFieldbucket(ctx);
	parse_and_callback(e->fields, json, "");
	cJSON_Delete(json);
done:
	return e;
}