C語言中操作JSON數據格式非常方便,但是日期格式在不同的系統中可能不一致,需要進行轉換。下面我們來講解如何在C語言中將JSON中的日期格式轉換成我們所需的格式。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <jansson.h> char* format_time(time_t t, char* buf, size_t len) { struct tm* ptm; ptm = gmtime(&t); strftime(buf, len, "%Y-%m-%d %H:%M:%S", ptm); return buf; } void convert_date(json_t* obj) { if (json_is_string(obj)) { const char* str = json_string_value(obj); time_t t = strtotime(str); if (t != -1) { char buf[32]; format_time(t, buf, sizeof(buf)); json_string_set(obj, buf); } } else if (json_is_array(obj) || json_is_object(obj)) { size_t i; json_t* value; json_array_foreach(obj, i, value) { convert_date(value); } } } int main(int argc, char* argv[]) { const char* str = "{ \"create_time\": \"2022-11-11 11:11:11\", \"update_time\": \"2022-11-11 22:22:22\" }"; json_error_t error; json_t* root = json_loads(str, 0, &error); if (!root) { fprintf(stderr, "json_loads failed: %s\n", error.text); return 1; } convert_date(root); char* dump_str = json_dumps(root, JSON_INDENT(4)); printf("%s\n", dump_str); free(dump_str); json_decref(root); return 0; }
首先我們需要一個函數將從JSON中解析出來的日期字符串轉換成time_t類型。這里我們采用標準庫函數gmtime和strftime來完成轉換,其中strftime的第二個參數"%Y-%m-%d %H:%M:%S"指定了最終日期字符串的格式。
接下來定義convert_date函數,遞歸遍歷JSON中的所有元素,如果元素是字符串類型,則調用format_time函數進行轉換,如果是數組或者對象類型,則遞歸遍歷其中的元素。
最后在main函數中解析JSON字符串,調用convert_date進行日期格式轉換,并且最終打印出轉換后的JSON字符串。