cJSON是一個(gè)經(jīng)過(guò)優(yōu)化的輕量級(jí)JSON解析器,它能夠?qū)SON數(shù)據(jù)轉(zhuǎn)換成C語(yǔ)言中的數(shù)據(jù)結(jié)構(gòu),并且可以將C語(yǔ)言中的數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換成JSON格式數(shù)據(jù)。
在使用cJSON解析JSON數(shù)據(jù)時(shí),我們通常會(huì)遇到一個(gè)問(wèn)題就是如何解析負(fù)數(shù)。在JSON數(shù)據(jù)中,負(fù)數(shù)可以用帶負(fù)號(hào)的數(shù)字來(lái)表示,例如:
{ "num": -123 }
如果我們需要將這段JSON數(shù)據(jù)解析成C語(yǔ)言中的數(shù)據(jù)結(jié)構(gòu),可以使用cJSON庫(kù)中的cJSON_Parse函數(shù)進(jìn)行解析,示例代碼如下:
#include "cJSON.h" int main() { // 假設(shè)有一段JSON數(shù)據(jù)如下 const char* json = "{\"num\": -123}"; // 解析JSON數(shù)據(jù) cJSON* root = cJSON_Parse(json); // 獲取"num"鍵對(duì)應(yīng)的值 cJSON* num = cJSON_GetObjectItem(root, "num"); // 輸出解析后的結(jié)果 printf("num = %d\n", num->valueint); // 釋放內(nèi)存 cJSON_Delete(root); return 0; }
在解析負(fù)數(shù)時(shí),cJSON_GetObjectItem返回的cJSON對(duì)象類(lèi)型為cJSON_Number,我們可以通過(guò)訪問(wèn)其valueint或valuedouble成員來(lái)獲取負(fù)數(shù)的值。
需要注意的是,在使用cJSON解析JSON數(shù)據(jù)時(shí),我們應(yīng)該對(duì)JSON數(shù)據(jù)的格式進(jìn)行嚴(yán)格的校驗(yàn),例如在本例中,如果JSON數(shù)據(jù)中的"num"鍵的值不是一個(gè)數(shù)字類(lèi)型,使用cJSON_GetObjectItem獲取值時(shí)會(huì)出現(xiàn)錯(cuò)誤。