最近在做一個(gè)項(xiàng)目中需要解析JSON數(shù)據(jù),查了一些資料,學(xué)習(xí)了一下C語(yǔ)言下的JSON解析庫(kù),下面將介紹如何使用cJSON解析單個(gè)JSON對(duì)象。
#include <stdio.h>
#include <stdlib.h>
#include <cJSON.h>
int main()
{
char *json_str = "{\"name\":\"張三\",\"age\":20,\"score\":80.5}";
cJSON *json = cJSON_Parse(json_str);
if (!json) {
printf("Error before: [%s]\n", cJSON_GetErrorPtr());
} else {
cJSON *name = cJSON_GetObjectItem(json, "name");
cJSON *age = cJSON_GetObjectItem(json, "age");
cJSON *score = cJSON_GetObjectItem(json, "score");
printf("name: %s\n", name->valuestring);
printf("age: %d\n", age->valueint);
printf("score: %f\n", score->valuedouble);
cJSON_Delete(json);
}
return 0;
}
上面是一段簡(jiǎn)單的代碼,首先我們需要將需要解析的JSON字符串傳入cJSON_Parse函數(shù),得到一個(gè)cJSON對(duì)象,然后通過(guò)cJSON_GetObjectItem函數(shù)獲取對(duì)象中的值,在此例中我們分別獲取了“name”、“age”、“score”三個(gè)對(duì)象,并輸出它們的值。
cJSON支持解析復(fù)雜的JSON結(jié)構(gòu),大多數(shù)函數(shù)的返回值都是一個(gè)cJSON對(duì)象,我們可以通過(guò)cJSON_Type函數(shù)獲取這個(gè)對(duì)象的類型,然后進(jìn)行類型轉(zhuǎn)換,獲取對(duì)應(yīng)的值,還可以使用cJSON_GetArraySize獲取數(shù)組的大小,使用cJSON_GetArrayItem獲取每個(gè)數(shù)組成員的值。
總之,cJSON是一個(gè)比較方便和易用的JSON解析庫(kù),而且cJSON非常輕量級(jí),易于集成到各種C語(yǔ)言項(xiàng)目中。它支持標(biāo)準(zhǔn)的JSON格式和一些非標(biāo)準(zhǔn)格式,是C語(yǔ)言下解析JSON數(shù)據(jù)的不二之選。