JSON(JavaScript Object Notation)是一種輕量級的數據交換格式,易于閱讀和編寫。在C語言中,我們可以使用第三方庫來解析JSON數據。例如,常用的庫有jsmn、 cJSON等等。
下面是使用cJSON庫解析JSON數據的步驟。
// 創建cJSON對象 cJSON* root = cJSON_Parse(jsonStr); // jsonStr為需要解析的JSON數據 if(!root) { printf("Error before: [%s]\n", cJSON_GetErrorPtr()); return -1; }
第一步:創建cJSON對象
我們在使用cJSON庫時,需要先創建一個cJSON對象,它可以代表一個JSON數據。使用cJSON_Parse()函數可以將JSON字符串解析成cJSON對象。
// 獲取指定節點的值 cJSON *node = NULL; node = cJSON_GetObjectItemCaseSensitive(root, "key"); if(cJSON_IsString(node)) { printf("%s",node->valuestring); }
第二步:獲取指定節點的值
使用cJSON_GetObjectItem()函數可以獲取JSON對象中指定節點的值。如果節點的值是字符串類型,則使用cJSON_IsString()函數判斷其類型,然后使用cJSON_Print()或node->valuestring來獲取該字段的實際數據值。
// 遍歷JSON對象的所有節點 cJSON* node = NULL; int i = 0; cJSON_ArrayForEach(node, root) { printf("%s\t",node->string); if(cJSON_IsNumber(node)) { printf("%f\n",node->valuedouble); } else if(cJSON_IsString(node)) { printf("%s\n",node->valuestring); } else if(cJSON_IsObject(node)) { printf("object\n"); } else if(cJSON_IsArray(node)) { printf("array\n"); } }
第三步:遍歷JSON對象的所有節點
使用cJSON_ArrayForEach()函數可以遍歷JSON對象中的所有節點。根據節點的類型,可以使用cJSON_IsNumber、cJSON_IsString、cJSON_IsObject、cJSON_IsArray等函數來判斷節點類型,并輸出節點的值。
使用cJSON庫解析JSON數據非常方便易用,可以快速地將JSON數據轉換成C語言中的數據結構,方便我們在程序中使用。
下一篇vue 語音文件上傳