00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00029 #include <wchar.h>
00030 #include <stdint.h>
00031
00032 #ifndef JSON_H
00033 #define JSON_H
00034
00035 #ifdef __cplusplus
00036 extern "C"
00037 {
00038 #endif
00039
00040 #define JSON_MAX_STRING_LENGTH SIZE_MAX-1
00041
00045 enum json_value_type
00046 { JSON_STRING = 0, JSON_NUMBER, JSON_OBJECT, JSON_ARRAY, JSON_TRUE, JSON_FALSE, JSON_NULL };
00047
00048
00052 enum json_error
00053 {
00054 JSON_OK = 1,
00055 JSON_INCOMPLETE_DOCUMENT,
00056 JSON_WAITING_FOR_EOF,
00057 JSON_MALFORMED_DOCUMENT,
00058 JSON_INCOMPATIBLE_TYPE,
00059 JSON_MEMORY,
00060 JSON_ILLEGAL_CHARACTER,
00061 JSON_BAD_TREE_STRUCTURE,
00062 JSON_MAXIMUM_LENGTH,
00063 JSON_UNKNOWN_PROBLEM
00064 };
00065
00066
00070 struct json_value
00071 {
00072 enum json_value_type type;
00073 char *text;
00075
00076 struct json_value *next;
00077 struct json_value *previous;
00078 struct json_value *parent;
00079 struct json_value *child;
00080 struct json_value *child_end;
00081 };
00082
00083
00084 typedef struct json_value json_t;
00085
00086
00090 struct json_parsing_info
00091 {
00092 unsigned int state;
00093 unsigned int lex_state;
00094 void *lex_text;
00095 char *p;
00096 int string_length_limit_reached;
00097 json_t *cursor;
00098 };
00099
00100
00104 struct json_saxy_functions
00105 {
00106 int (*open_object) ();
00107 int (*close_object) ();
00108 int (*open_array) ();
00109 int (*close_array) ();
00110 int (*new_string) (char * text);
00111 int (*new_number) (char * text);
00112 int (*new_true) ();
00113 int (*new_false) ();
00114 int (*new_null) ();
00115 int (*label_value_separator) ();
00116 int (*sibling_separator) ();
00117 };
00118
00119
00123 struct json_saxy_parser_status
00124 {
00125 unsigned int state;
00126 int string_length_limit_reached;
00127 void *temp;
00128 };
00129
00135 json_t *json_new_value (const enum json_value_type type);
00136
00137
00143 json_t *json_new_string (const char *text);
00144
00145
00151 json_t *json_new_number (const char *text);
00152
00153
00158 json_t *json_new_object (void);
00159
00160
00165 json_t *json_new_array (void);
00166
00167
00172 json_t *json_new_null (void);
00173
00174
00179 json_t *json_new_true (void);
00180
00181
00186 json_t *json_new_false (void);
00187
00188
00193 void json_free_value (json_t ** value);
00194
00195
00202 enum json_error json_insert_child (json_t * parent, json_t * child);
00203
00204
00212 enum json_error json_insert_pair_into_object (json_t * parent, const char *text_label, json_t * value);
00213
00214
00221 enum json_error json_tree_to_string (json_t * root, char **text);
00222
00223
00230
00231
00232
00237 void json_strip_white_spaces (char *text);
00238
00239
00245 char *json_format_string (const char *text);
00246
00247
00253 char *json_escape (char * text);
00254
00255
00261 void json_jpi_init (struct json_parsing_info *jpi);
00262
00263
00270 enum json_error json_parse_fragment (struct json_parsing_info *info, char *buffer);
00271
00272
00279 enum json_error json_parse_document (json_t **root, char *text);
00280
00281
00289 enum json_error json_saxy_parse (struct json_saxy_parser_status *jsps, struct json_saxy_functions *jsf, char c);
00290
00291
00298 json_t *json_find_first_label (const json_t * object, const char *text_label);
00299
00300
00301 #ifdef __cplusplus
00302 }
00303 #endif
00304 #endif