C JSON轉Model嵌套是指將JSON數據轉換為與之相對應的Model數據結構,這樣可以通過Model方便地操作數據和進行傳輸。然而,如果JSON數據結構嵌套較多,轉換起來就會比較麻煩,需要逐一解析JSON數據中的每個嵌套結構,再將其轉換為對應的Model對象。下面就是一種較為通用的C Json轉Model嵌套的方法。
// 先定義需要轉化的json數據的結構體 typedef struct student { char *name; int age; float score; struct course { char *name; int credit; } c[3]; } Student; // 再定義處理json數據的方法 void parse_student(const cJSON *student_json, Student **s) { //解析出name字段 cJSON* name_json = cJSON_GetObjectItem(student_json,"name"); //解析出age字段 cJSON* age_json = cJSON_GetObjectItem(student_json, "age"); //解析出score字段 cJSON* score_json = cJSON_GetObjectItem(student_json, "score"); //解析出course字段 cJSON* course_json = cJSON_GetObjectItem(student_json, "course"); // 根據解析結果實例化Student結構體 *s = (Student*)malloc(sizeof(Student)); (*s)->name = name_json->valuestring; (*s)->age = age_json->valueint; (*s)->score = score_json->valuedouble; // 處理course數據,循環構建course對象 int array_size = cJSON_GetArraySize(course_json); for (int i = 0; i< array_size; i++) { cJSON* course_i_json = cJSON_GetArrayItem(course_json,i); char* name = cJSON_GetObjectItem(course_i_json,"name")->valuestring; int credit = cJSON_GetObjectItem(course_i_json,"credit")->valueint; (*s)->c[i].name = name; (*s)->c[i].credit = credit; } } // 具體使用方法 // 獲得需要處理的json數據 char *student_json_str = "{\"name\":\"小明\",\"age\":18,\"score\":99.8,\"course\":[{\"name\":\"數學\",\"credit\":5},{\"name\":\"語文\",\"credit\":4},{\"name\":\"英語\",\"credit\":3}]}"; cJSON *json = cJSON_Parse(student_json_str); Student *s = NULL; parse_student(json, &s);
上述代碼定義了一個Student結構體,其中包含了一個Course結構體數組。在解析JSON數據時,通過cJSON_GetObjectItem()方法逐一獲取JSON中每個字段的值,并賦值給相應的Student對象或Course對象屬性即可。具體請見代碼注釋。
下一篇c json轉sql