C語言中反序列化解析JSON文件是一種常見的數據處理方式。JSON是一種輕量級的數據交換格式,它由鍵值對(key-value)構成,支持數組和對象類型。反序列化是將JSON格式的字符串轉換成對應的數據結構的過程,將JSON數據和C語言中的數據對象進行映射和轉換。本文將介紹如何使用C語言實現反序列化解析JSON文件。
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<jansson.h> int main(){ char* jsonStr = "{\"name\":\"Tom\",\"age\":18,\"grades\":[80,90,85]}"; json_error_t error; json_t* root = json_loads(jsonStr, 0, &error); if(root == NULL){ printf("JSON解析錯誤: %s", error.text); return -1; } const char* name; json_int_t age; json_t* grades; json_t* grade; size_t i; if(!json_is_object(root)){ printf("JSON解析錯誤: 根節點不是一個對象\n"); return -1; } json_unpack(root, "{s:s,s:i,s:o}", "name", &name, "age", &age, "grades", &grades); printf("姓名:%s\n", name); printf("年齡:%d\n", age); if(json_array_size(grades)==0){ printf("成績:%s\n", "無"); }else{ printf("成績:"); for(i=0; i<json_array_size(grades); i++){ grade = json_array_get(grades, i); printf("%d ", json_integer_value(grade)); } } json_decref(root); return 0; }
在上述代碼中,程序首先定義了一個JSON格式字符串,并使用json_loads函數將其解析為一個json_t對象。如果解析失敗則會返回空指針并提示解析錯誤的信息。解析成功后,使用json_unpack函數將json_t對象中的數據解包到指定的變量中,從而將JSON數據映射到C語言中的數據結構中。其中,需要注意的是,json_unpack函數的格式參數可以與sprintf函數中的格式參數作法相同,指明輸入數據的數據類型、數據名稱以及其在JSON中對應的鍵名。在本例中,我們使用了“s:s”、“i”、“o”等格式參數,分別表示字符串、整數、對象等類型的數據內容。最后,使用json_decref函數釋放內存,以達到程序健壯性和優化內存占用的目的。
上一篇python 繼承文件夾
下一篇c 動態轉json對象