C語言常用于實現網絡通信功能,而JSON是一種輕量級的數據交換格式,因此在C語言中通過JSON發送和接收數據是非常常見的一種操作,本文將介紹如何在C語言中使用JSON發送和接收數據。
首先,我們需要使用C語言的JSON庫,在這里我們介紹兩個比較常用的庫,分別是cJSON和Jansson。cJSON是一個輕量級的JSON解析器,具有簡單易用、代碼量小的特點,Jansson則是一個更為強大的JSON庫,支持更多的JSON操作,用法也更為豐富。本文將以cJSON為例進行介紹。
/* cJSON發送JSON數據示例 */ cJSON *root = cJSON_CreateObject(); cJSON_AddStringToObject(root, "name", "Tom"); cJSON_AddNumberToObject(root, "age", 12); cJSON_AddStringToObject(root, "sex", "male"); char *json_str = cJSON_Print(root); cJSON_Delete(root); /* 發送JSON數據 */ int sockfd = socket(AF_INET, SOCK_STREAM, 0); connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)); write(sockfd, json_str, strlen(json_str)); close(sockfd);
以上代碼演示了如何通過cJSON庫將JSON數據發送出去。首先我們創建一個cJSON的根對象,然后使用cJSON_Add**ToObject()函數向根對象中添加鍵值對,再使用cJSON_Print()函數將對象序列化為JSON字符串。最后我們將JSON字符串通過socket發送出去即可。
/* cJSON接收JSON數據示例 */ /* 接收數據 */ char buf[1024]; int sockfd = socket(AF_INET, SOCK_STREAM, 0); connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)); read(sockfd, buf, sizeof(buf)); close(sockfd); /* 解析JSON數據 */ cJSON *root = cJSON_Parse(buf); const char *name = cJSON_GetObjectItem(root, "name")->valuestring; int age = cJSON_GetObjectItem(root, "age")->valueint; const char *sex = cJSON_GetObjectItem(root, "sex")->valuestring; cJSON_Delete(root);
以上代碼演示了如何通過cJSON庫接收JSON數據并解析。首先我們通過socket接收到收到的JSON字符串,接著使用cJSON_Parse()函數將JSON字符串解析成cJSON對象,然后再通過cJSON_GetObjectItem()函數獲取對象中的鍵值對,最后我們將解析得到的數據存放在相應的變量中即可。
在實際開發中,我們可能會遇到多級JSON嵌套、JSON數組等情況,這時候需要更加熟悉cJSON庫的使用以及對JSON數據結構的理解。同時在發送和接收過程中,還需要注意網絡字節序的問題、數據長度的處理等問題,這些內容超出了本文的范圍。
上一篇mysql列注釋和行注釋
下一篇c json取數據類型