C語言中的JSON解析庫有很多種,其中比較常用的就是cJSON。我們在使用cJSON解析JSON格式的字符串時,通常需要取得指定節點的值,本文就來介紹一下如何在cJSON中取得指定節點的方法。
首先,我們需要將JSON格式的字符串解析成cJSON的結構體。可以使用cJSON_Parse函數進行解析,將解析結果存儲在cJSON結構體中。例如,我們可以解析以下JSON格式的字符串:
{ "name": "小明", "age": 18, "sex": "男" }
使用cJSON_Parse函數解析的代碼如下:
char* jsonStr = "{\"name\":\"小明\",\"age\":18,\"sex\":\"男\"}"; cJSON* root = cJSON_Parse(jsonStr);
解析完成后,我們就可以使用cJSON提供的函數訪問cJSON結構體中的節點了。cJSON結構體中的節點可以理解成一個個鍵值對。每個鍵值對包含一個“key”和一個“value”。
訪問一個節點的方法是,首先通過cJSON_GetObjectItem函數獲取節點的鍵值對,然后再通過cJSON_GetString、cJSON_GetNumber等函數取得節點值的具體內容。例如,我們要獲取上面的JSON字符串中的“name”節點,代碼如下:
cJSON* nameNode = cJSON_GetObjectItem(root, "name"); char* name = cJSON_GetString(nameNode); printf("name is %s\n", name);
上面的代碼中,cJSON_GetObjectItem函數用于獲取“name”節點的鍵值對,然后使用cJSON_GetString函數取得節點的字符串類型的值。同樣的,如果我們想獲取“age”節點的整數類型的值,可以這樣寫:
cJSON* ageNode = cJSON_GetObjectItem(root, "age"); int age = cJSON_GetNumber(ageNode); printf("age is %d\n", age);
在cJSON的結構體中,可能會存在嵌套節點的情況,因此我們需要使用類似于樹形結構的方式遍歷cJSON結構體,取得指定節點的值。例如,如果我們要獲取以下JSON字符串中“company”的“name”節點值:
{ "name": "王五", "age": 22, "sex": "男", "company": { "name": "阿里巴巴", "address": "杭州市濱江區" } }
我們就需要先獲取“company”節點的值,然后再獲取“name”節點的值。代碼如下:
cJSON* companyNode = cJSON_GetObjectItem(root, "company"); cJSON* companyNameNode = cJSON_GetObjectItem(companyNode, "name"); char* companyName = cJSON_GetString(companyNameNode); printf("company name is %s\n", companyName);
以上就是cJSON中取得指定節點的方法。需要注意的是,在取得節點值之前,務必使用cJSON_GetObjectItem函數判斷對應節點是否存在,否則會引發訪問NULL指針等問題。