C JSON轉List<>
#include <stdio.h> #include <cjson/cJSON.h> #include <list> int main() { char *json_str = "{" " \"name\": \"Jack\"," " \"age\": 30," " \"hobby\": [\"basketball\", \"swimming\", \"reading\"]" "}"; cJSON *root = cJSON_Parse(json_str); char *name = cJSON_GetObjectItem(root, "name")->valuestring; int age = cJSON_GetObjectItem(root, "age")->valueint; cJSON *hobby = cJSON_GetObjectItem(root, "hobby"); list<char *> hobby_lst; cJSON *item = hobby->child; while (item != NULL) { hobby_lst.push_back(item->valuestring); item = item->next; } printf("name=%s, age=%d\n", name, age); for (char *str: hobby_lst) { printf("%s\n", str); } cJSON_Delete(root); return 0; }
C JSON庫提供了部分基礎數據類型,如:NULL、true、false、number和string等,同時還支持對象(object)和數組(array)類型的數據,可以根據需要進行嵌套操作。對于C++開發人員來說,使用C庫時,轉換為C++標準庫數據類型時非常方便,如將JSON數組轉換為std::vector類型數據,將JSON對象轉換為std::map類型數據等,但對于項目使用list<>類型較多的人來說,需要將JSON數組轉換為list<>類型數據。
在以上示例代碼中,我們將JSON字符串解析為cJSON對象(即root),然后依次獲取對象中的屬性值(name、age、hobby)。對于hobby屬性,是一個JSON數組,需要遍歷數組中的所有元素,并將元素添加到list<>實例對象中。
list<char *> hobby_lst; cJSON *item = hobby->child; while (item != NULL) { hobby_lst.push_back(item->valuestring); item = item->next; }
在以上代碼中,我們定義了一個list<>類型對象(hobby_lst)用于存放JSON數組中的每個元素。從hobby屬性中獲取到數組的首元素(即child),然后遍歷數組中所有元素,并將元素的valuestring值(即元素的值)添加到hobby_lst中,并將下一個元素item指向數組的下一個元素,循環直到item為NULL時退出循環。
最后輸出C++標準庫數據類型即可。
上一篇vue如何延時賦值