1 /* ZZJSON - Copyright (C) 2008 by Ivo van Poorten
2 * License: GNU Lesser General Public License version 2.1
11 #define ZZJSON_VERSION_MAJOR 1
12 #define ZZJSON_VERSION_MINOR 1
13 #define ZZJSON_VERSION_MICRO 0
14 #define ZZJSON_VERSION_INT ( 1<<16 | 1<<8 | 0 )
15 #define ZZJSON_IDENT "zzjson 1.1.0"
19 #define ZZJSON_ALLOW_EXTRA_COMMA 1
20 #define ZZJSON_ALLOW_ILLEGAL_ESCAPE 2
21 #define ZZJSON_ALLOW_CONTROL_CHARS 4
22 #define ZZJSON_ALLOW_GARBAGE_AT_END 8
23 #define ZZJSON_ALLOW_COMMENTS 16
25 #define ZZJSON_VERY_LOOSE (-1)
26 #define ZZJSON_VERY_STRICT 0
30 /* needed by: pa = parser, pr = printer, f = free, q = query, c = create */
31 typedef struct ZZJSON_CONFIG
{
34 int (*getchar
)(void *ihandle
); // pa
35 int (*ungetchar
)(int c
, void *ihandle
); // pa
36 void *(*malloc
)(size_t size
); // pa c
37 void *(*calloc
)(size_t nmemb
, size_t size
); // pa c
38 void (*free
)(void *ptr
); // pa f c
39 void *(*realloc
)(void *ptr
, size_t size
); // pa
40 void *ehandle
; // pa pr c
41 void (*error
)(void *ehandle
, const char *format
, ...); // pa pr c
43 int (*print
)(void *ohandle
, const char *format
, ...); // pr
44 int (*putchar
)(int c
, void *handle
); // pr
47 typedef enum ZZJSON_TYPE
{
60 typedef struct ZZJSON
{
75 unsigned long long ival
;
85 ZZJSON
*zzjson_parse(ZZJSON_CONFIG
*config
);
86 void zzjson_free(ZZJSON_CONFIG
*config
, ZZJSON
*zzjson
);
87 int zzjson_print(ZZJSON_CONFIG
*config
, ZZJSON
*zzjson
);
89 ZZJSON
*zzjson_object_find_label(ZZJSON
*zzjson
, char *label
);
90 ZZJSON
*zzjson_object_find_labels(ZZJSON
*zzjson
, ...); // end with , NULL
91 unsigned int zzjson_object_count(ZZJSON
*zzjson
);
92 unsigned int zzjson_array_count(ZZJSON
*zzjson
);
94 ZZJSON
*zzjson_create_true(ZZJSON_CONFIG
*config
);
95 ZZJSON
*zzjson_create_false(ZZJSON_CONFIG
*config
);
96 ZZJSON
*zzjson_create_null(ZZJSON_CONFIG
*config
);
97 ZZJSON
*zzjson_create_number_d(ZZJSON_CONFIG
*config
, double d
);
98 ZZJSON
*zzjson_create_number_i(ZZJSON_CONFIG
*config
, long long i
);
99 ZZJSON
*zzjson_create_string(ZZJSON_CONFIG
*config
, char *s
);
101 /* list of ZZJSON *'s and end with , NULL */
102 ZZJSON
*zzjson_create_array(ZZJSON_CONFIG
*config
, ...);
104 /* list of char*,ZZJSON* pairs, end with , NULL */
105 ZZJSON
*zzjson_create_object(ZZJSON_CONFIG
*config
, ...);
107 ZZJSON
*zzjson_array_prepend(ZZJSON_CONFIG
*config
, ZZJSON
*array
,
109 ZZJSON
*zzjson_array_append (ZZJSON_CONFIG
*config
, ZZJSON
*array
,
112 ZZJSON
*zzjson_object_prepend(ZZJSON_CONFIG
*config
, ZZJSON
*object
,
113 char *label
, ZZJSON
*val
);
114 ZZJSON
*zzjson_object_append (ZZJSON_CONFIG
*config
, ZZJSON
*object
,
115 char *label
, ZZJSON
*val
);