Mercurial > wgsdk
view include/json.h @ 12:dd427b7cc459 default tip
json: replace with nxjson library
more lightweight, reduces the binary size by about 40 kb
author | Paper <paper@paper.us.eu.org> |
---|---|
date | Fri, 15 Mar 2024 20:46:18 -0400 |
parents | e6a594f16403 |
children |
line wrap: on
line source
/* * Copyright (c) 2013 Yaroslav Stavnichiy <yarosla@gmail.com> * * This file is part of NXJSON. * * NXJSON is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation, either version 3 * of the License, or (at your option) any later version. * * NXJSON is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with NXJSON. If not, see <http://www.gnu.org/licenses/>. */ #ifndef NXJSON_H #define NXJSON_H #ifdef __cplusplus extern "C" { #endif #ifndef NXJSON_TYPE_U64 #include <stdint.h> typedef uint64_t nxjson_u64; #endif #ifndef NXJSON_TYPE_S64 #include <stdint.h> typedef uint64_t nxjson_s64; #endif typedef enum nx_json_type { NX_JSON_NULL, // this is null value NX_JSON_OBJECT, // this is an object; properties can be found in child nodes NX_JSON_ARRAY, // this is an array; items can be found in child nodes NX_JSON_STRING, // this is a string; value can be found in text_value field NX_JSON_INTEGER, // this is an integer; value can be found in int_value field NX_JSON_DOUBLE, // this is a double; value can be found in dbl_value field NX_JSON_BOOL // this is a boolean; value can be found in int_value field } nx_json_type; typedef struct nx_json { nx_json_type type; // type of json node, see above const char *key; // key of the property; for object's children only union { const char *text_value; // text value of STRING node struct { union { nxjson_u64 u_value; // the value of INTEGER or BOOL node nxjson_s64 s_value; }; double dbl_value; // the value of DOUBLE node } num; struct { // children of OBJECT or ARRAY int length; struct nx_json *first; struct nx_json *last; } children; }; struct nx_json *next; // points to next child } nx_json; typedef int (*nx_json_unicode_encoder)(unsigned int codepoint, char *p, char **endp); extern nx_json_unicode_encoder nx_json_unicode_to_utf8; const nx_json *nx_json_parse(char *text, nx_json_unicode_encoder encoder); const nx_json *nx_json_parse_utf8(char *text); void nx_json_free(const nx_json *js); const nx_json *nx_json_get(const nx_json *json, const char *key); // get object's property by key const nx_json *nx_json_item(const nx_json *json, int idx); // get array element by index #ifdef __cplusplus } #endif #endif /* NXJSON_H */