在很多開發(fā)中,我們經(jīng)常需要用到菜單,而三級(jí)菜單是比較常用的菜單結(jié)構(gòu)之一。為了更好的管理和存儲(chǔ)三級(jí)菜單數(shù)據(jù),我們可以使用json格式來(lái)存儲(chǔ)三級(jí)菜單數(shù)據(jù)。
{ "menu": [ { "id":1, "name":"菜單1", "children": [ { "id": 11, "name": "子菜單11", "url": "/menu1/child11" }, { "id": 12, "name": "子菜單12", "url": "/menu1/child12" } ] }, { "id":2, "name":"菜單2", "children": [ { "id": 21, "name": "子菜單21", "url": "/menu2/child21" }, { "id": 22, "name": "子菜單22", "url": "/menu2/child22" } ] } ] }
以上是一個(gè)簡(jiǎn)單的三級(jí)菜單json數(shù)據(jù)結(jié)構(gòu)。我們可以用c語(yǔ)言來(lái)讀取和解析json數(shù)據(jù)。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <cjson/cJSON.h> #define JSON_FILE "menu.json" int main() { FILE *fp; char buf[BUFSIZ]; cJSON *json; cJSON *root; cJSON *menu; cJSON *submenu; cJSON *child; int i, j, k; if ((fp=fopen(JSON_FILE, "rb")) == NULL) { printf("open file error!\n"); exit(EXIT_FAILURE); } fread(buf, sizeof(buf), 1, fp); fclose(fp); json = cJSON_Parse(buf); if (json == NULL) { printf("parse json error!\n"); exit(EXIT_FAILURE); } root = cJSON_GetObjectItem(json, "menu"); for (i = 0; i< cJSON_GetArraySize(root); i++) { menu = cJSON_GetArrayItem(root, i); printf("menu[%d]:%s\n", i, menu->valuestring); for (j = 0; j< cJSON_GetArraySize(menu->children); j++) { submenu = cJSON_GetArrayItem(menu->children, j); printf("\tsubmenu[%d].name:%s, url:%s\n", j, submenu->name, submenu->url); for (k = 0; k< cJSON_GetArraySize(submenu->children); k++) { child = cJSON_GetArrayItem(submenu->children, k); printf("\t\tchild[%d].name:%s, url:%s\n", k, child->name, child->url); } } } cJSON_Delete(json); return 0; }
以上是一個(gè)簡(jiǎn)單的讀取json數(shù)據(jù)結(jié)構(gòu)的程序代碼。通過(guò)上述程序代碼,我們可以快速的讀取和處理三級(jí)菜單的數(shù)據(jù)信息。