在C語言中,處理JSON數據有時是必需的。收發JSON數據是一種常見場景,尤其是在WEB開發中。針對此類應用場景,我們需要掌握C語言中收發JSON數據的相關知識。
// include json-c頭文件 #include// 創建JSON對象 json_object *jsonObj = json_object_new_object(); // 在JSON對象中添加鍵值對 json_object_object_add(jsonObj, "name", json_object_new_string("張三")); json_object_object_add(jsonObj, "age", json_object_new_int(20)); // 將JSON對象轉為字符串 const char *jsonString = json_object_to_json_string(jsonObj); // 發送JSON數據 send(sockfd, jsonString, strlen(jsonString), 0); // 釋放JSON對象 json_object_put(jsonObj);
在上述代碼中,我們使用了json-c庫中的函數來創建JSON對象,并添加了一些屬性,最后將其轉換為字符串并發送到指定的socket。需要注意的是,我們在使用完JSON對象后必須釋放它,否則可能會出現內存泄漏。
在接收JSON數據時,可以使用C語言中的recv函數。接收到數據后,我們可以使用json-c庫中的函數來解析JSON字符串并獲取其中的鍵值對。
// 定義接收緩沖區 char recvBuf[MAX_BUF_LEN]; // 接收JSON數據 recv(sockfd, recvBuf, MAX_BUF_LEN, 0); // 解析JSON數據 json_object *jsonObj = json_tokener_parse(recvBuf); // 獲取鍵值對屬性 json_object *nameObj, *ageObj; json_object_object_get_ex(jsonObj, "name", &nameObj); json_object_object_get_ex(jsonObj, "age", &ageObj); // 打印屬性值 printf("Name: %s\nAge: %d\n", json_object_get_string(nameObj), json_object_get_int(ageObj)); // 釋放JSON對象 json_object_put(jsonObj);
在上述代碼中,我們定義了接收緩沖區,使用recv函數接收JSON數據。然后,我們使用json-c庫中的函數將接收到的JSON字符串解析為JSON對象,并使用json_object_object_get_ex函數獲取其中的鍵值對屬性。最后,我們通過json_object_get_*函數獲取屬性值,進行打印,并釋放JSON對象。