在C語言編程過程中,經(jīng)常需要使用JSON解析庫來解析JSON數(shù)據(jù)格式,而解析出的時(shí)間戳又是一個(gè)常見的數(shù)據(jù)類型之一,下面我們來介紹一下如何使用C語言的JSON解析庫解析時(shí)間戳。
在C語言中,常用的JSON解析庫有CJSON、jq等。這里我們以CJSON為例,假設(shè)我們有一個(gè)JSON格式的時(shí)間戳數(shù)據(jù):
{ "timestamp": 1624485772 }
我們需要用CJSON解析出來這個(gè)時(shí)間戳,并轉(zhuǎn)換為C語言中的時(shí)間格式。下面是CJSON解析JSON格式的基本代碼:
#include "cJSON.h" #includeint main() { char *json_str = "{\"timestamp\": 1624485772}"; // JSON格式數(shù)據(jù) cJSON *json = cJSON_Parse(json_str); // 解析JSON數(shù)據(jù) if(json == NULL) { printf("JSON解析失敗\n"); return -1; } cJSON *timestamp_json = cJSON_GetObjectItem(json, "timestamp"); // 獲取時(shí)間戳數(shù)據(jù) if(timestamp_json == NULL) { printf("時(shí)間戳數(shù)據(jù)獲取失敗\n"); return -1; } long timestamp = timestamp_json->valueint; // 將時(shí)間戳數(shù)據(jù)轉(zhuǎn)換為long類型 printf("時(shí)間戳:%ld\n", timestamp); return 0; }
上面的代碼中,我們首先用cJSON_Parse函數(shù)解析JSON格式數(shù)據(jù),然后用cJSON_GetObjectItem函數(shù)獲取時(shí)間戳數(shù)據(jù),并將其轉(zhuǎn)換為long類型。最后打印出時(shí)間戳數(shù)據(jù)。
如果我們需要將時(shí)間戳轉(zhuǎn)換為C語言中的時(shí)間格式,需要使用C語言的time.h庫。下面是將時(shí)間戳轉(zhuǎn)換為C語言中時(shí)間格式的完整代碼:
#include "cJSON.h" #include#include int main() { char *json_str = "{\"timestamp\": 1624485772}"; cJSON *json = cJSON_Parse(json_str); if(json == NULL) { printf("JSON解析失敗\n"); return -1; } cJSON *timestamp_json = cJSON_GetObjectItem(json, "timestamp"); if(timestamp_json == NULL) { printf("時(shí)間戳數(shù)據(jù)獲取失敗\n"); return -1; } time_t timestamp = (time_t)timestamp_json->valueint; // 將時(shí)間戳轉(zhuǎn)換為time_t類型 struct tm *timeinfo = localtime(×tamp); // 獲取時(shí)間格式 char time_buff[20]; strftime(time_buff, sizeof(time_buff), "%Y-%m-%d %H:%M:%S", timeinfo); // 格式化輸出 printf("時(shí)間格式:%s\n", time_buff); return 0; }
上面的代碼中,我們首先將時(shí)間戳數(shù)據(jù)轉(zhuǎn)換為time_t類型,然后使用localtime函數(shù)獲取時(shí)間格式,并通過strftime函數(shù)將時(shí)間格式化輸出。