Home | History | Annotate | Download | only in zzjson
      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 
     10 ZZJSON *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 
     26 ZZJSON *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 
     42 unsigned 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 
     53 unsigned 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