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進行反序列化操作時,我們需要注意一些細節,如數組的處理、嵌套結構體的遍歷等。
上一篇python 短文本聚類
下一篇vue傳遞對象集合