因?yàn)橐馕鰆son,為了避免重復(fù)造輪子就查找了C語(yǔ)言解析json的庫(kù)(雖然我也想自己寫一個(gè)解析json的庫(kù),可能在我把我的項(xiàng)目完成后會(huì)自己做一個(gè)。),然后就決定使用cJSON這個(gè)庫(kù),因?yàn)樗容^輕量級(jí)上手也快,學(xué)會(huì)幾個(gè)函數(shù)調(diào)用就可以解析json了,下面是json的簡(jiǎn)單使用和介紹。
cJSON是C語(yǔ)言的一個(gè)輕量級(jí)的一個(gè)json解析庫(kù)。下載地址在這里
下面是cJSON中json的數(shù)據(jù)結(jié)構(gòu)
typedef struct cJSON {
struct cJSON *next,*prev;? ? ? ? ? ? ? ? ? ? ?
//上(下)一個(gè)節(jié)點(diǎn)
struct cJSON *child;? ? ? ? ? ? ? ? ? ? ? ?
//子節(jié)點(diǎn)
int type;? ? ? ?
//元素類型
char *valuestring;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
//如果元素是字符串的值
int valueint;
//如果元素是整形的值
double valuedouble;? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
//如果元素是浮點(diǎn)型的值
char *string;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
//字段名稱
} cJSON;
type在cJSON中定義了七種類型
#define cJSON_False 0
#define cJSON_True 1
#define cJSON_NULL 2
#define cJSON_Number 3
#define cJSON_String 4
#define cJSON_Array 5
#define cJSON_Object 6
cJSON通過(guò)cJSON_Parse()函數(shù)傳入字符串創(chuàng)建cJSON鏈表(雙向)并返回cJSON指針。
下面是解析流程
1.先將字符串處理成cJSON對(duì)象
char *js_string = "{\"status\":\"1\",\"info\":\"OK\",\"infocode\":\"10000\"}";
cJSON *root;
root = cJSON_Parse(js_string);
2.通過(guò)字段名稱獲取值
cJSON *json_status, *json_info;
json_status = cJSON_GetObjectItem(root, "status");
json_info = cJSON_GetObjectItem(root, "info");
printf("status:%s, info:%s\n", json_status->valuestring, json_info->valuestring);
3.釋放cJSON鏈表
cJSON_Delete(root);
其他函數(shù)介紹
1.將json結(jié)構(gòu)體轉(zhuǎn)化成字符串
printf(cJSON_Print(root));
奇變偶不變,符號(hào)看象限
------------------------------魯迅
水出我第二篇文章了哈哈哈哈
給我點(diǎn)十個(gè)贊我就買瓶可樂慶祝下