色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

c 嵌套json 反序列化

錢瀠龍2年前8瀏覽0評論

在 C 語言中,我們常常需要將 JSON 格式的數據反序列化成為 C 結構體中的成員變量,其中嵌套 JSON 是常見的情況。嵌套 JSON 通常是指 JSON 數據中包含一個或多個 JSON 對象或數組,而這些 JSON 對象或數組又包含其他 JSON 對象或數組。這種情況下,我們需要使用嵌套結構體來表示 JSON 數據。

// C 結構體的聲明
typedef struct
{
char *name;
int age;
// 嵌套結構體
struct Address
{
char *city;
char *street;
} address;
// 嵌套數組
struct Score
{
int math;
int english;
} score[3];
} Person;

以上是一個 C 結構體的例子,其中包含了一個嵌套結構體和一個嵌套數組。接下來,我們需要編寫反序列化的代碼來將 JSON 數據映射到 C 結構體中:

// 解析 JSON 數據
Person p;
cJSON *root = cJSON_Parse(json_str);
strcpy(p.name, cJSON_GetObjectItem(root, "name")->valuestring);
p.age = cJSON_GetObjectItem(root, "age")->valueint;
strcpy(p.address.city, cJSON_GetObjectItem(cJSON_GetObjectItem(root, "address"), "city")->valuestring);
strcpy(p.address.street, cJSON_GetObjectItem(cJSON_GetObjectItem(root, "address"), "street")->valuestring);
int i;
for (i = 0; i< 3; i++)
{
p.score[i].math = cJSON_GetObjectItem(cJSON_GetObjectItem(root, "score"), i)->math;
p.score[i].english = cJSON_GetObjectItem(cJSON_GetObjectItem(root, "score"), i)->english;
}

在以上代碼中,我們使用 cJSON 庫來解析 JSON 數據。通過 cJSON_GetObjectItem() 函數可以獲取 JSON 數據中指定鍵的值,再通過 strcpy() 函數將數據映射到結構體中。對于嵌套的 JSON 對象或數組,我們需要使用 cJSON_GetObjectItem() 函數嵌套調用。

需要注意的是,在定義結構體時,嵌套結構體和數組的聲明需要放在結構體內部,而不能在結構體外部使用 typedef 或其他方式聲明。

綜上所述,嵌套 JSON 反序列化是 C 語言中常見的需求,我們可以使用 cJSON 庫來完成解析,需要注意結構體內部嵌套結構體或數組的聲明方式。