00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef JSON_H
00020 #define JSON_H
00021
00022 #include <wchar.h>
00023 #include <apr.h>
00024 #include <apr_pools.h>
00025 #include <apr_tables.h>
00026 #include <apr_hash.h>
00027
00028 enum JSON_type
00029 {
00030 JSON_UNKNOWN,
00031 JSON_OBJECT,
00032 JSON_ARRAY,
00033 JSON_STRING,
00034 JSON_NUMBER,
00035 JSON_BOOLEAN,
00036 JSON_NULL
00037 };
00038 typedef enum JSON_type JSON_type;
00039
00040 struct JSON_value
00041 {
00042 JSON_type type;
00043 union
00044 {
00045 apr_hash_t *object;
00046 apr_array_header_t *array;
00047 wchar_t *z;
00048 double number;
00049 int boolean;
00050 } value_u;
00051 apr_pool_t *pool;
00052 };
00053 typedef struct JSON_value JSON_value;
00054 #define object_value value_u.object
00055 #define array_value value_u.array
00056 #define string_value value_u.z
00057 #define number_value value_u.number
00058 #define boolean_value value_u.boolean
00059
00060 JSON_value *JSON_parse (apr_pool_t * pool, char *text, int text_len);
00061
00062 JSON_value *JSON_value_new (apr_pool_t * pool, int type);
00063
00064 void JSON_print (FILE * file, JSON_value * value);
00065
00066 struct JSON_ctx
00067 {
00068 apr_pool_t *pool;
00069 JSON_value *result;
00070 int error;
00071 };
00072 typedef struct JSON_ctx JSON_ctx;
00073
00074
00075 void *JSONParserAlloc (void *(*mallocProc) (size_t));
00076 void JSONParser (void *yyp, int yymajor, JSON_value * value, JSON_ctx * ctx);
00077 void JSONParserFree (void *p, void (*freeProc) (void *));
00078 void JSONParserTrace (FILE * TraceFILE, char *zTracePrompt);
00079
00080 #endif