1 /* JSON query 2 * ZZJSON - Copyright (C) 2008 by Ivo van Poorten 3 * License: GNU Lesser General Public License version 2.1 4 */ 5 6 #include "zzjson.h" 7 #include <string.h> 8 #include <stdarg.h> 9 zzjson_object_find_label(ZZJSON * zzjson,char * label)10ZZJSON *zzjson_object_find_label(ZZJSON *zzjson, char *label) { 11 if (zzjson->type != ZZJSON_OBJECT) return NULL; 12 13 while (zzjson) { 14 char *string = zzjson->value.object.label; 15 16 if (zzjson->type != ZZJSON_OBJECT) return NULL; 17 if (!string) return NULL; 18 19 if (!strcmp(string, label)) 20 return zzjson->value.object.val; 21 zzjson = zzjson->next; 22 } 23 return NULL; 24 } 25 zzjson_object_find_labels(ZZJSON * zzjson,...)26ZZJSON *zzjson_object_find_labels(ZZJSON *zzjson, ...) { 27 va_list ap; 28 char *lbl; 29 30 va_start(ap, zzjson); 31 lbl = va_arg(ap, char *); 32 while (lbl) { 33 zzjson = zzjson_object_find_label(zzjson, lbl); 34 if (!zzjson) break; 35 lbl = va_arg(ap, char *); 36 } 37 va_end(ap); 38 39 return zzjson; 40 } 41 zzjson_object_count(ZZJSON * zzjson)42unsigned int zzjson_object_count(ZZJSON *zzjson) { 43 unsigned int count = 1; 44 45 if (zzjson->type != ZZJSON_OBJECT) return 0; 46 if (!zzjson->value.object.label) return 0; /* empty { } */ 47 48 while ((zzjson = zzjson->next)) count++; 49 50 return count; 51 } 52 zzjson_array_count(ZZJSON * zzjson)53unsigned int zzjson_array_count(ZZJSON *zzjson) { 54 unsigned int count = 1; 55 56 if (zzjson->type != ZZJSON_ARRAY) return 0; 57 if (!zzjson->value.array.val) return 0; /* empty [ ] */ 58 59 while ((zzjson = zzjson->next)) count++; 60 61 return count; 62 } 63 64