• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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)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 
zzjson_object_find_labels(ZZJSON * zzjson,...)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 
zzjson_object_count(ZZJSON * zzjson)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 
zzjson_array_count(ZZJSON * zzjson)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