在使用C語言解析JSON時,我們有時會遇到JSON串中存在多層嵌套的情況,導致C中的JSON結構體中會出現多個中括號。下面就來介紹一下這種情況的處理方式。
{ "name": "Tom", "age": 20, "scores": [ { "subject": "Math", "score": 90 }, { "subject": "English", "score": 80 } ] }
以上是一個簡單的JSON示例,其中的"scores"屬性是一個數組類型,包含了兩個對象,每個對象中又都有兩個屬性。當我們用C語言的JSON庫解析這段JSON時,會得到下面的結果:
typedef struct { char *name; int age; struct { char *subject; int score; } scores[2]; } person_t; person_t person = { .name = "Tom", .age = 20, .scores = { {"Math", 90}, {"English", 80} } };
可以看到,由于"scores"是一個數組類型,因此需要用到一對中括號。如果數組元素數量不確定,那么可以使用動態內存分配函數malloc()來分配內存,同時使用指針來指向數組:
typedef struct { char *name; int age; struct { char *subject; int score; } *scores; int scores_num; } person_t; person_t person = { .name = "Tom", .age = 20, .scores = malloc(2 * sizeof(struct {char *subject; int score;})), .scores_num = 2 }; person.scores[0].subject = "Math"; person.scores[0].score = 90; person.scores[1].subject = "English"; person.scores[1].score = 80; //需要在程序結束時釋放動態內存 free(person.scores);
當然,在使用動態內存分配時,也需要注意內存的釋放問題。