JSON是一種輕量級的數據交換格式,在各種編程語言中都有對JSON的支持。C語言也不例外,有許多開源的JSON庫可供使用。本文將著重介紹cJSON庫中的JSON value。
typedef struct cJSON { struct cJSON *next; struct cJSON *prev; struct cJSON *child; int type; char *valuestring; int valueint; double valuedouble; char *string; } cJSON;
在cJSON中,JSON value是通過cJSON結構體實現的。每個JSON value都可以分為兩個部分:數據類型和值。其中,數據類型通過type屬性表示,值則根據不同的數據類型存在于不同的屬性中:
- string:字符串類型的值存在于valuestring屬性中。
- number:數字類型的值存在于valueint或valuedouble屬性中,根據數值類型決定。
- object:對象類型的值存在于child屬性中,即對象中嵌套的JSON value列表。
- array:數組類型的值同樣存在于child屬性中,即數組中的每個元素也是一個JSON value。
- null:空類型的值不存在于結構體中,但是使用cJSON_GetObjectItem或cJSON_GetArrayItem等函數獲取時會返回一個空指針(NULL)。
cJSON通過type屬性在內部識別JSON value的類型,在解析和構造JSON數據時很有用。例如,在讀取JSON數據時,使用cJSON_Parse函數獲得一個JSON對象之后,可以通過逐層訪問對象中各個字段的type屬性,從而判斷出當前字段所表示的JSON value類型,然后使用對應的cJSON_GetObjectItem或cJSON_GetArrayItem等函數獲取實際值。在構造JSON數據時,通過cJSON_CreateObject、cJSON_CreateArray等函數創建一個JSON value,并根據需要添加到其他JSON對象或數組中,最終形成完整的JSON數據。