CJSON是一個C語言的JSON解析器,可以方便地將JSON字符串解析成C語言中的對象。在CJSON中,我們可以將一個JSON字符串轉(zhuǎn)換為一個對象集合,這些對象集合可以用來存儲一個JSON對象或一個JSON數(shù)組中的多個對象。下面是一個簡單的例子來演示如何將一個JSON字符串轉(zhuǎn)換為對象集合。
#include <stdio.h> #include <cJSON.h> int main() { char *json_string = "{\"name\": \"Tom\", \"age\": 20, \"scores\": [80, 90, 95]}"; cJSON *root = cJSON_Parse(json_string); // 解析JSON字符串 if (root != NULL) { cJSON *name = cJSON_GetObjectItem(root, "name"); // 獲取name屬性 cJSON *age = cJSON_GetObjectItem(root, "age"); // 獲取age屬性 cJSON *scores = cJSON_GetObjectItem(root, "scores"); // 獲取scores屬性 printf("name: %s\n", name->valuestring); // 輸出name屬性值 printf("age: %d\n", age->valueint); // 輸出age屬性值 cJSON *score = NULL; cJSON_ArrayForEach(score, scores) { // 遍歷scores屬性 printf("score: %d\n", score->valueint); // 輸出每個score屬性值 } cJSON_Delete(root); // 釋放JSON對象占用的內(nèi)存 } return 0; }
首先,我們需要定義一個JSON字符串,它描述了一個人的基本信息及其成績,它包括一個name屬性、一個age屬性和一個scores屬性,scores屬性是一個包含三個成績的數(shù)組。
接著,我們調(diào)用cJSON_Parse函數(shù)來解析JSON字符串,將其轉(zhuǎn)換為一個對象集合。然后,我們使用cJSON_GetObjectItem函數(shù)獲取對象集合中的各個屬性,并使用屬性對象的valuestring或valueint成員來獲取對應的屬性值。
最后,我們使用cJSON_ArrayForEach函數(shù)遍歷scores屬性,這個函數(shù)可以自動遍歷一個JSON數(shù)組中的所有元素,我們只需要指定一個指針變量來承載每個元素即可。在循環(huán)中,我們可以調(diào)用對象的valueint成員來獲取每個元素的數(shù)值,并將其打印出來。
最后我們需要調(diào)用cJSON_Delete函數(shù)釋放JSON對象占用的內(nèi)存,避免出現(xiàn)內(nèi)存泄漏的問題。通過這個例子,你可能已經(jīng)初步了解了CJSON庫中如何將JSON字符串轉(zhuǎn)換為對象集合,并一一訪問其中的屬性。