C 是一種經(jīng)典的編程語言,它可以處理各種數(shù)據(jù)格式,包括 JSON。當(dāng)我們需要處理 JSON 數(shù)據(jù)中的時(shí)間格式時(shí),就需要特別注意,因?yàn)?JSON 中的時(shí)間格式通常是字符串類型的,需要進(jìn)行轉(zhuǎn)換后才能使用。
#include <time.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <jansson.h> int main(int argc, const char *argv[]) { const char *json_string = "{\"time\":\"2021-09-28T05:32:00Z\"}"; json_t *root; json_error_t error; root = json_loads(json_string, JSON_ENCODE_ANY, &error); if (!root) { fprintf(stderr, "error: on line %d: %s\n", error.line, error.text); return 1; } json_t *time_json = json_object_get(root, "time"); if (!time_json) { fprintf(stderr, "error: no time field\n"); return 1; } const char *time_str = json_string_value(time_json); struct tm time_struct = {0}; char time_buf[32] = {0}; strptime(time_str, "%Y-%m-%dT%H:%M:%SZ", &time_struct); strftime(time_buf, sizeof(time_buf), "%Y-%m-%d %H:%M:%S", &time_struct); printf("time: %s\n", time_buf); json_decref(root); return 0; }
上述代碼中,我們首先使用json_loads()
函數(shù)將 JSON 字符串轉(zhuǎn)換為 JSON 對象,然后使用json_object_get()
函數(shù)從對象中獲取時(shí)間字符串。
接下來,我們使用 POSIX 標(biāo)準(zhǔn)的strptime()
函數(shù)將時(shí)間字符串轉(zhuǎn)換為tm
時(shí)間結(jié)構(gòu)體,并使用strftime()
函數(shù)將tm
結(jié)構(gòu)體轉(zhuǎn)換為可讀的時(shí)間字符串。最后,使用json_decref()
函數(shù)釋放 JSON 對象,避免內(nèi)存泄漏。
通過這些步驟,我們就可以輕松處理 JSON 數(shù)據(jù)中的時(shí)間格式,方便地進(jìn)行后續(xù)的數(shù)據(jù)處理。