在C語言中,處理JSON數據變得越來越普遍和必要。CJSON是一種輕量級的JSON庫,它能夠快速快速地處理JSON數據。本文將介紹一個CJSON的封裝類,以方便在C語言項目中使用。
typedef struct JSONObject_st JSON_Object; typedef struct JSONArray_st JSON_Array; typedef struct JSONPair_st JSON_Pair; typedef struct JSONData_st JSON_Data; struct JSONObject_st { int count; JSON_Pair* pairs; }; struct JSONArray_st { int count; JSON_Data* values; }; struct JSONPair_st { char* key; JSON_Data* value; }; enum JSONDataTypes { JSON_NULL, JSON_OBJECT, JSON_ARRAY, JSON_STRING, JSON_NUMBER, JSON_BOOL }; struct JSONData_st { enum JSONDataTypes type; union { char* string; double number; JSON_Object* object; JSON_Array* array; int boolean; }value; };
JSONObject、JSONArray和JSONPair分別代表JSON中的對象、數組和鍵值對。JSONData包含了JSON中的數據類型。同時,該類還提供了一些簡便的方法來讀寫JSON數據。
JSON_Object* JSON_NewObject(); JSON_Array* JSON_NewArray(); JSON_Pair* JSON_FindPair(JSON_Object* obj, const char* key); JSON_Data* JSON_FindData(JSON_Object* obj, const char* key); JSON_Data* JSON_FindValue(JSON_Array* array, int i); int JSON_GetArrayCount(JSON_Array* array); int JSON_GetObjectCount(JSON_Object* obj); void JSON_AddPair(JSON_Object* obj, const char* key, JSON_Data* value); void JSON_AddString(JSON_Array* array, const char* str); void JSON_AddNumber(JSON_Array* array, double number); void JSON_AddBool(JSON_Array* array, int boolean); JSON_Object* JSON_ParseObject(const char* jsonStr); JSON_Array* JSON_ParseArray(const char* jsonStr); char* JSON_GetString(JSON_Data* data); double JSON_GetNumber(JSON_Data* data); int JSON_GetBoolean(JSON_Data* data);
JSON_NewObject和JSON_NewArray分別用于創建JSONObject和JSONArray類型的對象。JSON_FindPair和JSON_FindData用于找到JSONObject中指定的鍵值對。JSON_FindValue用于找到JSONArray中指定索引位置的值。JSON_GetArrayCount和JSON_GetObjectCount用于獲取JSONArray和JSONObject的長度。JSON_AddPair用于添加JSONObject中的鍵值對,另有JSON_AddString、JSON_AddNumber和JSON_AddBool用于向JSONArray中添加具體數據類型的元素。JSON_ParseObject和JSON_ParseArray分別用于解析JSON字符串返回對應的類型。JSON_GetString、JSON_GetNumber和JSON_GetBoolean用于獲取JSONData中的具體值。
使用該封裝類,我們可以方便地在C語言中讀寫JSON數據。雖然C語言本身不適合處理JSON數據,但使用該封裝類可以大大簡化處理JSON數據的工作。