JSON(JavaScript Object Notation)是一種輕量級的數(shù)據(jù)交換格式,通常用于前后端數(shù)據(jù)傳輸。在 JSON 格式中,時間也是一種常見的數(shù)據(jù)類型。但是,在前后端交互過程中,往往需要進行時間格式的轉(zhuǎn)換。下面,我們介紹一下如何在 C 語言中進行 JSON 時間格式轉(zhuǎn)換。
#include <stdlib.h> #include <stdio.h> #include <time.h> #include <json-c/json.h> #define TIME_FORMAT "%Y-%m-%d %H:%M:%S" int main(void) { char t_str[20] = "2022-08-18 14:20:00"; json_object *jobj, *jtime; struct tm tm_t; time_t t; strptime(t_str, TIME_FORMAT, &tm_t); // 字符串轉(zhuǎn)換為時間結(jié)構(gòu)體 t = mktime(&tm_t); // 時間結(jié)構(gòu)體轉(zhuǎn)換為時間戳 jobj = json_object_new_object(); jtime = json_object_new_int64(t * 1000); // 時間戳乘以1000轉(zhuǎn)換為毫秒級別 json_object_object_add(jobj, "time", jtime); // 添加時間 printf("JSON string: %s\n", json_object_to_json_string(jobj)); // 輸出 JSON 字符串 json_object_put(jobj); // 釋放 JSON 對象 return 0; }
在上述代碼中,我們首先定義了一個時間字符串 t_str,然后使用 strptime 函數(shù)將其轉(zhuǎn)換為 time.h 庫中的結(jié)構(gòu)體 tm_t。接著,使用 mktime 函數(shù)將 tm_t 結(jié)構(gòu)體轉(zhuǎn)換為時間戳 t。注意,時間戳的單位是秒,而在 JSON 格式中,時間戳的單位通常為毫秒。因此,在轉(zhuǎn)換為 JSON 格式之前,我們需要將時間戳乘以 1000,以轉(zhuǎn)換為毫秒級別的時間戳。
接著,使用 json-c 庫中的函數(shù)創(chuàng)建一個新的 JSON 對象 jobj,并創(chuàng)建一個名為 “time” 的子對象 jtime,并將其添加到 jobj 對象中。最后,使用函數(shù) json_object_to_json_string 將 jobj 對象轉(zhuǎn)換為字符串形式,并輸出到控制臺上。
使用上述代碼,我們可以很方便地將時間格式從字符串轉(zhuǎn)換為 JSON 格式。當然,在實際開發(fā)中,我們還需要對 JSON 格式的時間進行反向轉(zhuǎn)換,將其從毫秒級別的時間戳轉(zhuǎn)換為字符串形式的時間。在此處,我們不再一一介紹,讀者可以參考 json-c 庫的官方文檔進行學習。