在使用C語言開發(fā)過程中,json 結(jié)構(gòu)體是很常見的一種數(shù)據(jù)結(jié)構(gòu)。Json 結(jié)構(gòu)體常常被用于在不同程序之間傳遞數(shù)據(jù),或者將數(shù)據(jù)存儲到文件中。
typedef struct JSON_OBJECT { int type; /* 元素類型 */ char* key; /* key值 */ union { char* s_val; /* 字符串類型的值 */ double n_val; /* 數(shù)值類型的值 */ int b_val; /* 布爾類型的值 */ struct JSON_OBJECT* o_val; /* 對象類型的值 */ struct JSON_ARRAY* a_val; /* 數(shù)組類型的值 */ } value; /* 具體的元素值,不同類型值的以 union 的形式存儲 */ struct JSON_OBJECT* next; /* 兄弟元素 */ } JSON_OBJECT;
JSON_OBJECT 結(jié)構(gòu)體是一個(gè)嵌套結(jié)構(gòu)體,其中包含了元素類型、key值以及不同類型的具體值,這樣就可以存儲各種不同的數(shù)據(jù)類型。JSON_OBJECT還包含了一個(gè)指向兄弟元素的指針,這樣就可以方便地組織成一個(gè)對象。
使用 JSON_OBJECT 結(jié)構(gòu)體來存儲 json 數(shù)據(jù),可以使用遞歸的方式訪問和操作,比較方便,并且代碼比較簡潔。下面是一個(gè)示例代碼,使用 JSON_OBJECT 結(jié)構(gòu)體創(chuàng)建了一個(gè) json 對象,并將其輸出到控制臺:
int main() { JSON_OBJECT* jsonObj = create_json_object(); set_integer_value(jsonObj, "key1", 1); set_string_value(jsonObj, "key2", "string_value"); set_boolean_value(jsonObj, "key3", true); set_object_value(jsonObj, "key4", create_json_object()); set_array_value(jsonObj, "key5", create_json_array()); printf("json object: %s\n", json_to_string(jsonObj)); return 0; }
以上代碼使用了 create_json_object 函數(shù)來創(chuàng)建一個(gè) json 對象,并分別使用 set_integer_value、set_string_value、set_boolean_value、set_object_value、set_array_value 函數(shù)向該對象中添加了不同類型的值。最后使用 json_to_string 函數(shù)將 json 對象打印出來。