JSON是一種輕量級的數據交換格式,它可以用來描述復雜的數據結構。在C語言中,解析JSON需要使用第三方庫。其中,cJSON是一款常用的C語言JSON解析庫,支持將JSON字符串轉換為C語言的數據結構。
// 示例JSON字符串 const char* json_str = "{\"name\": \"Alice\", \"age\": 18, \"score\": [85, 90, 95]}"; // 解析JSON字符串 cJSON* root = cJSON_Parse(json_str); if (root == NULL) { printf("Failed to parse JSON string\n"); return; } // 從JSON對象中獲取名稱為"name"的字符串值 cJSON* name = cJSON_GetObjectItem(root, "name"); if (name == NULL) { printf("Failed to get name\n"); } else { printf("Name: %s\n", name->valuestring); } // 從JSON對象中獲取名稱為"age"的數值 cJSON* age = cJSON_GetObjectItem(root, "age"); if (age == NULL) { printf("Failed to get age\n"); } else { printf("Age: %d\n", age->valueint); } // 從JSON對象中獲取名稱為"score"的數組 cJSON* score = cJSON_GetObjectItem(root, "score"); if (score == NULL) { printf("Failed to get score\n"); } else { int size = cJSON_GetArraySize(score); printf("Score:"); for (int i = 0; i< size; i++) { cJSON* item = cJSON_GetArrayItem(score, i); printf(" %d", item->valueint); } printf("\n"); } // 釋放JSON解析結果的內存 cJSON_Delete(root);
在解析JSON時,需要注意輸入的JSON格式是否合法。當JSON格式不合法時,cJSON_Parse函數會返回NULL,需要進行錯誤處理。另外,依據JSON對象的類型可以使用不同的獲取函數,例如,從JSON對象中獲取字符串值可以使用cJSON_GetObjectItem(root, "name")->valuestring。