在C語言中實現(xiàn)對字符串的轉(zhuǎn)換通常可以使用第三方的JSON庫,其中比較常用的有cJSON、Jansson等。在其中,cJSON是一款輕量級的JSON解析庫,可以完成字符串與JSON對象的轉(zhuǎn)換。下面將會介紹如何使用cJSON來進行字符串轉(zhuǎn)JSON的操作。
/** * 字符串轉(zhuǎn)JSON */ cJSON *str2json(const char *str) { cJSON *json = cJSON_Parse(str); if (!json) { printf("Error before: %s\n", cJSON_GetErrorPtr()); return NULL; } return json; }
上述代碼可以將一個字符串轉(zhuǎn)換成對應(yīng)的JSON對象并返回。在調(diào)用cJSON_Parse函數(shù)的時候需要注意,如果解析出錯時會返回一個NULL指針,所以在代碼中需要對其返回進行判斷。
/** * 示例代碼 */ int main(int argc, char *argv[]) { const char *str = "{" "\"name\": \"張三\"," "\"age\": 18," "\"phone\": [\"13888888888\", \"13999999999\"]," "\"address\": {" "\"province\": \"江蘇\"," "\"city\": \"南京\"," "\"district\": \"雨花臺區(qū)\"" "}" "}"; cJSON *json = str2json(str); if (json) { // 輸出JSON對象的值 printf("name: %s\n", cJSON_GetObjectItem(json, "name")->valuestring); printf("age: %d\n", cJSON_GetObjectItem(json, "age")->valueint); // 獲取JSON數(shù)組 cJSON *phone = cJSON_GetObjectItem(json, "phone"); printf("phone: \n"); for (int i = 0; i< cJSON_GetArraySize(phone); i++) { printf("%s\n", cJSON_GetArrayItem(phone, i)->valuestring); } // 獲取JSON對象 cJSON *address = cJSON_GetObjectItem(json, "address"); printf("address: \n"); printf("province: %s\n", cJSON_GetObjectItem(address, "province")->valuestring); printf("city: %s\n", cJSON_GetObjectItem(address, "city")->valuestring); printf("district: %s\n", cJSON_GetObjectItem(address, "district")->valuestring); // 釋放JSON對象 cJSON_Delete(json); } return 0; }
上面是一個字符串轉(zhuǎn)JSON的示例代碼。在代碼中,我們首先將一個字符串傳入到str2json函數(shù)中,并獲取到返回的JSON對象。然后,通過cJSON_GetObjectItem函數(shù)可以方便地獲取到對應(yīng)JSON對象中的值。當然,在代碼中同樣需要注意內(nèi)存泄漏的情況,我們需要通過cJSON_Delete函數(shù)來釋放JSON對象。