在C語言中,使用Json格式進行數據傳輸和存儲已經變得十分普遍。為了更方便地進行json數據的轉化和操作,可以使用專門的Json轉化類。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include <stdbool.h> /* json類型 */ typedef enum { JSON_NULL, JSON_BOOLEAN, JSON_NUMBER, JSON_STRING, JSON_ARRAY, JSON_OBJECT } json_type; /* json值 */ typedef struct json_value json_value; struct json_value { json_type type; /* json類型 */ union { bool boolean; /* bool值 */ double number; /* 數字 */ struct { /* 字符串 */ char* string; size_t length; } string; struct { /* 數組 */ json_value* element; size_t size; } array; struct { /* 對象 */ char** keys; json_value* values; size_t size; } object; } u; }; /* json錯誤 */ enum { JSON_PARSE_OK = 0, JSON_PARSE_EXPECT_VALUE, /* 解析至少需要一個值 */ JSON_PARSE_INVALID_VALUE, /* 非法的值 */ JSON_PARSE_ROOT_NOT_SINGULAR, /* 單個值之后還有其他字符 */ JSON_PARSE_NUMBER_TOO_BIG /* 數字太大 */ }; /* 解析json字符串 */ int json_parse(json_value* v, const char* json); /* 獲取json類型 */ json_type json_get_type(const json_value* v); /* 判斷值是否為null */ bool json_is_null(const json_value* v); /* 獲取bool值 */ int json_get_boolean(const json_value* v); /* 獲取數字 */ double json_get_number(const json_value* v); /* 獲取字符串 */ const char* json_get_string(const json_value* v); /* 獲取字符串長度 */ size_t json_get_string_length(const json_value* v); /* 獲取數組長度 */ size_t json_get_array_size(const json_value* v); /* 獲取數組元素 */ json_value* json_get_array_element(const json_value* v, size_t index); /* 獲取對象大小 */ size_t json_get_object_size(const json_value* v); /* 獲取對象鍵 */ const char* json_get_object_key(const json_value* v, size_t index); /* 獲取對象值 */ json_value* json_get_object_value(const json_value* v, size_t index); /* 釋放json值 */ void json_free(json_value* v);
以上是一個簡單的Json轉化類的代碼,包括json數據類型的枚舉常量定義、json值的結構體定義、json解析函數、獲取各種類型的值的函數、以及json值的釋放函數等。需要注意的是,這個Json轉化類是比較簡單的,只支持了基本的json數據類型,對于json比較復雜的數據格式可能不太適用。
上一篇python 文件寫權限
下一篇mysql刪除數據庫列