隨著互聯(lián)網(wǎng)和移動(dòng)互聯(lián)網(wǎng)的迅猛發(fā)展,各種前后端技術(shù)層出不窮。而在這些技術(shù)中,json成為了一個(gè)不可或缺的角色。因此,我們需要掌握json的解析方法來(lái)處理這些數(shù)據(jù)。下面,我們來(lái)講一下如何將c語(yǔ)言中的json解析成list string。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include "cJSON.h" int main() { char* json_str = "{\"name\":\"zhangsan\",\"age\":18,\"hobbies\":[\"reading\",\"running\",\"swimming\"]}"; cJSON* root = cJSON_Parse(json_str); if (!root) { printf("json parse error\n"); return -1; } cJSON* hobbies = cJSON_GetObjectItem(root, "hobbies"); if (!hobbies) { printf("json parse error\n"); cJSON_Delete(root); return -1; } if (cJSON_IsArray(hobbies)) { int size = cJSON_GetArraySize(hobbies); if (size >0) { char** list = (char**)malloc(sizeof(char*) * size); memset(list, 0, sizeof(char*) * size); int i = 0; cJSON* hobby = NULL; cJSON_ArrayForEach(hobby, hobbies) { char* str = cJSON_PrintUnformatted(hobby); if (str) { list[i++] = str; } } for (i = 0; i< size; i++) { printf("%s\n", list[i]); } for (i = 0; i< size; i++) { if (list[i]) { free(list[i]); } } free(list); } } cJSON_Delete(root); return 0; }
上面是一個(gè)使用cJSON庫(kù)將json解析成list string的代碼示例。首先,我們需要將json字符串解析成一個(gè)cJSON格式的根節(jié)點(diǎn)。之后,我們可以通過(guò)cJSON_GetObjectItem()函數(shù)獲取到我們需要解析的數(shù)組項(xiàng)。在本例中,我們需要獲取"hobbies"數(shù)組。
然后,我們需要使用cJSON_IsArray()函數(shù)判斷該項(xiàng)是否為一個(gè)數(shù)組類型。如果是,則可以使用cJSON_GetArraySize()函數(shù)獲取數(shù)組的大小。通過(guò)cJSON_ArrayForEach()函數(shù)遍歷數(shù)組中的每一項(xiàng),將其轉(zhuǎn)化為一個(gè)字符串并存放在char**類型的list中。
最后,我們輸出list中的每一個(gè)字符串,并釋放內(nèi)存。