在C語言中,解析JSON常常使用第三方庫來實現,其中比較常用的有cJSON和Jansson兩個庫。
//使用cJSON解析JSON字符串 #include "cJSON.h" #include <stdio.h> int main() { char* jsonstr = "{\"name\":\"張三\",\"age\":20,\"scores\":[85,90,95]}"; cJSON* root = cJSON_Parse(jsonstr); if (root == NULL) { printf("cJSON_Parse error\n"); return -1; } cJSON* name = cJSON_GetObjectItem(root, "name"); cJSON* scores = cJSON_GetObjectItem(root, "scores"); if (name != NULL) { printf("name:%s\n", name->valuestring); } if (scores != NULL && cJSON_IsArray(scores)) { for (int i = 0; i < cJSON_GetArraySize(scores); i++) { cJSON* score = cJSON_GetArrayItem(scores, i); printf("score%d:%d\n", i+1, score->valueint); } } cJSON_Delete(root); return 0; }
以上代碼使用cJSON庫解析了一個JSON字符串,并將其解析成cJSON對象。通過cJSON_GetObjectItem函數獲取JSON對象中的字段,通過cJSON_GetArrayItem和cJSON_GetArraySize函數獲取JSON數組中的元素,并可以根據需要進行處理。
//使用Jansson解析JSON字符串 #include <jansson.h> #include <stdio.h> int main() { char* jsonstr = "{\"name\":\"張三\",\"age\":20,\"scores\":[85,90,95]}"; json_error_t error; json_t* root = json_loads(jsonstr, 0, &error); if (root == NULL) { printf("%s:%d:%s\n", error.source, error.line, error.text); return -1; } json_t* name = json_object_get(root, "name"); json_t* scores = json_object_get(root, "scores"); if (name != NULL) { printf("name:%s\n", json_string_value(name)); } if (scores != NULL && json_is_array(scores)) { size_t index; json_t* score; json_array_foreach(scores, index, score) { printf("score%lu:%d\n", index+1, json_integer_value(score)); } } json_decref(root); return 0; }
以上代碼使用Jansson庫解析了同樣的JSON字符串,并將其解析成json_t對象。通過json_object_get函數獲取JSON對象中的字段,通過json_array_foreach函數獲取JSON數組中的元素,并可以根據需要進行處理。
總而言之,無論使用哪個第三方庫,解析JSON字符串的過程都類似,而具體實現則需要根據不同的庫進行適當調整。