JSON(JavaScript Object Notation)是一種輕量級數據交換格式。它易于閱讀和編寫,并且易于機器解析和生成,符合現代Web服務通信的需求。C語言是一種強大的編程語言,許多應用程序都使用C語言進行開發,因此C語言中Json解析的實現也與日俱增。
C語言中常用的Json解析庫有以下幾個: cJSON、Jansson和json-c。其中,cJSON是C語言中最易于使用的Json庫之一,可以在嵌入式平臺上使用,并且僅需一個c文件和頭文件即可,無需其他依賴。
// cJSON的使用示例 cJSON* root = cJSON_Parse(jsonstr); if (root == NULL) { printf("Error before: %s\n", cJSON_GetErrorPtr()); } else { cJSON* name = cJSON_GetObjectItem(root, "name"); cJSON* age = cJSON_GetObjectItem(root, "age"); cJSON* list = cJSON_GetObjectItem(root, "list"); if (name && name->type == cJSON_String) { printf("Name: %s\n", name->valuestring); } if (age && age->type == cJSON_Number) { printf("Age: %d\n", age->valueint); } if (list && list->type == cJSON_Array) { for (int i = 0; i< cJSON_GetArraySize(list); i++) { cJSON* item = cJSON_GetArrayItem(list, i); if (item && item->type == cJSON_String) { printf("Item %d: %s\n", i, item->valuestring); } } } cJSON_Delete(root); }
使用cJSON解析Json,首先需要調用cJSON_Parse()函數將Json字符串解析為cJSON數據結構,然后就可以使用cJSON_GetObjectItem()函數獲取Json對象中的屬性。在獲取對象屬性時,需要判斷該屬性的類型是否與預期一致,例如字符串類型就需要使用cJSON_String、整數類型使用cJSON_Number等等。如果獲取的對象屬性是一個數組,可以通過cJSON_GetArraySize()函數獲取數組的長度,使用cJSON_GetArrayItem()函數獲取數組中的元素。
除了cJSON之外,Jansson和json-c也是C語言中常用的Json庫,它們的使用方式與cJSON相似,都是通過解析Json字符串轉換為數據結構,然后獲取對象屬性,但是這兩個庫需要更多的依賴庫,使用起來需要更復雜的配置。