欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

c 嵌套類型json反序列化

錢浩然1年前7瀏覽0評論

C語言中,我們可以使用json-c這款庫來對JSON字符串進行反序列化操作,將JSON字符串轉換成C語言中的數據結構。在json-c中,使用了嵌套類型來表示JSON數據結構,使得我們在使用時可以更加方便、靈活。

假設我們有以下的JSON字符串:

{
"name": "Jack",
"age": 18,
"gender": "male",
"interests": [
"coding",
"reading",
"traveling"
],
"address": {
"country": "China",
"province": "Beijing",
"city": "Haidian"
}
}

要將這個JSON字符串轉換成C語言中的數據結構,我們可以定義如下的結構體:

typedef struct {
char *name;
int age;
char *gender;
char **interests;
int interestsCount;
struct {
char *country;
char *province;
char *city;
} address;
} Person;

可以看出,我們使用了嵌套類型來表示JSON數據結構中的嵌套層級。對于數組類型,我們可以使用指向字符串的指針數組來表示。在這個結構體中,我們還可以看到一個嵌套結構體的定義。

接下來,我們可以使用json-c中的函數來進行反序列化操作,將JSON字符串轉換成我們定義的Person結構體。

Person *person = NULL;
json_object *json = json_tokener_parse(jsonStr);
json_object_object_foreach(json, key, val) {
if (strcmp(key, "name") == 0) {
person->name = strdup(json_object_get_string(val));
} else if (strcmp(key, "age") == 0) {
person->age = json_object_get_int(val);
} else if (strcmp(key, "gender") == 0) {
person->gender = strdup(json_object_get_string(val));
} else if (strcmp(key, "interests") == 0) {
json_object *arrayVal = json_object_array_get_idx(val, 0);
int arraySize = json_object_array_length(val);
person->interestsCount = arraySize;
person->interests = malloc(sizeof(char*) * arraySize);
int i;
for (i = 0; i< arraySize; i++) {
person->interests[i] = strdup(json_object_get_string(json_object_array_get_idx(val, i)));
}
} else if (strcmp(key, "address") == 0) {
json_object_object_foreach(val, k, v) {
if (strcmp(k, "country") == 0) {
person->address.country = strdup(json_object_get_string(v));
} else if (strcmp(k, "province") == 0) {
person->address.province = strdup(json_object_get_string(v));
} else if (strcmp(k, "city") == 0) {
person->address.city = strdup(json_object_get_string(v));
}
}
}
}

在這個代碼中,我們首先使用json_tokener_parse函數將JSON字符串轉換成json_object對象。然后,我們使用json_object_object_foreach函數遍歷這個json_object對象中的每個成員,依次將對應的值轉換成Person結構體中的成員。

因為我們使用了嵌套類型來表示JSON數據結構,所以在使用json-c進行反序列化操作時,我們需要注意一些細節,如數組的處理、嵌套結構體的遍歷等。