/
superterminator
/
JsonParse
Обзор
Документация
Войти
/
superterminator
/
JsonParse
Код
Запросы
0
Задачи
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
include/json_parse.h
101 строка
3 KB
superterminator
initial commit
15 сен 2024, 11:40
15 сен 2024, 11:40
f4b359b
Код
Авторство
О чём код?
#pragma once #ifndef TOOLS_JSON_28_04_2019 #define TOOLS_JSON_28_04_2019 #include "tools_import.h" #define ERR_JSON_SUCCESS 0x0 #define ERR_JSON_BAD_PARAMS 0x1 #define ERR_JSON_BAD_SYNTAX 0x2 #define ERR_JSON_MEMORY 0x3 #define ERR_JSON_BAD_VALUE_TYPE 0x4 #define ERR_JSON_NO_FIELD 0x5 #define ERR_JSON_INSUFFICIENT_BUFFER 0x6 #define ERR_JSON_UNKNOWN 0xFF #ifdef __cplusplus extern "C" { #endif enum JsonTokenType { JsonTokenNone, JsonTokenString,//like "name" - quoted JsonTokenValue,//not quoted JsonTokenComma, JsonTokenColon, JsonTokenSqBracketL, JsonTokenSqBracketR, JsonTokenCurBracketL, JsonTokenCurBracketR, JsonTokenTotal, }; struct JsonToken { enum JsonTokenType type; const char* text; int len; }; enum JsonNodeType { JsonNodeUnknown = 0, JsonNodeObject,//named, like "name":{} JsonNodeObjectValue,//like {} JsonNodeArray,//named, like "name1":[] JsonNodeArrayValue,//like [] JsonNodeField,//named, like "name":val JsonNodeString, //string, like "name" or "val", its length is with quotes. "val" have length of 5 JsonNodeValue, //324, or True, or 432.21 JsonNodeKeyword,//[]{},: JsonNodeCommaNamed,//internal type like "name1":val1,"name2":val2 JsonNodeCommaFields,//internal type like val1,val2 JsonNodeCommaObjects,//internal type like {},{} JsonNodeCommaArrays,//internal type like [],[] JsonNodeTotal }; struct JsonTokenList { struct JsonToken token; struct JsonTokenList* next; }; struct JsonNode { enum JsonNodeType type; const struct JsonToken* token; struct JsonNode* subnodes; struct JsonNode* next; struct JsonNode* prev; struct JsonNode* parent; }; struct JsonDocument { char* text; int text_length; struct JsonNode* nodes; struct JsonTokenList* tokens; }; EXPORT_IMPORT_TOOLS_PREFIX int init_json_document(struct JsonDocument** obj, char* text); EXPORT_IMPORT_TOOLS_PREFIX void deinit_json_document(struct JsonDocument** ptr); //need this one, some fields can guide processing of another EXPORT_IMPORT_TOOLS_PREFIX int get_subnode_named(const char* name, const struct JsonNode* parent_node, const struct JsonNode** subnode); EXPORT_IMPORT_TOOLS_PREFIX int get_str_int_value(const char* str, int str_length, int* out); EXPORT_IMPORT_TOOLS_PREFIX int get_str_float_value(const char* str, int str_length, float* out); EXPORT_IMPORT_TOOLS_PREFIX int get_subnode_named_int_value(const char* name, const struct JsonNode* parent_node, int* out); EXPORT_IMPORT_TOOLS_PREFIX int get_subnode_named_float_value(const char* name, const struct JsonNode* parent_node, float* out); EXPORT_IMPORT_TOOLS_PREFIX int get_subnode_named_str_value(const char* name, const struct JsonNode* parent_node, char* out, int max_len); #ifdef __cplusplus } #endif #endif