在C語言中使用json格式數(shù)據(jù)是非常常見的場景,而嵌套的json格式數(shù)據(jù)又是其中最為常見的形式之一。
在常見的json庫中,每個json值都可以通過一個結(jié)構(gòu)體進行表示。而針對嵌套的json數(shù)據(jù),結(jié)構(gòu)體的嵌套也就不可避免。一個最為常見的嵌套結(jié)構(gòu)示例如下:
{ "name": "Tom", "age": 20, "address": { "country": "China", "province": "Jiangsu", "city": "Suzhou" } }
上述json數(shù)據(jù)中,address值對應(yīng)了一個嵌套的json結(jié)構(gòu)體,而該結(jié)構(gòu)體中又包含了三個成員:country、province和city。在C語言中表示上述json格式可以采用以下結(jié)構(gòu)體:
typedef struct _json_obj { enum _json_type type; //表示json值類型 union { struct _json_obj *obj; //json對象類型,該結(jié)構(gòu)體中嵌套了_json_obj結(jié)構(gòu)體,實現(xiàn)嵌套 char *str; int64_t i; double f; } v; } json_obj;
如上述結(jié)構(gòu)體所示,_json_obj中嵌套了自身,以便存儲json嵌套對象的數(shù)據(jù)。因此,上述json數(shù)據(jù)可以在C語言中對應(yīng)以下結(jié)構(gòu)體:
json_obj obj = { JSON_OBJ, { .obj = (json_obj*)malloc(sizeof(json_obj) * 3) } }; //針對obj->v.obj內(nèi)的三個值進行賦值 obj->v.obj[0].type = JSON_STR; obj->v.obj[0].v.str = strdup("China"); obj->v.obj[1].type = JSON_STR; obj->v.obj[1].v.str = strdup("Jiangsu"); obj->v.obj[2].type = JSON_STR; obj->v.obj[2].v.str = strdup("Suzhou"); //將obj賦值給address json_obj *address = (json_obj*)malloc(sizeof(json_obj)); address->type = JSON_OBJ; address->v.obj = obj->v.obj;
使用以上代碼可以實現(xiàn)對于json嵌套對象的存儲,并且可以根據(jù)需要擴展更深層次的嵌套。
上一篇c json 傳輸文件
下一篇c json 中文 編碼