JSON(JavaScript Object Notation)是一種輕量級(jí)的數(shù)據(jù)交換格式,經(jīng)常被使用在前端項(xiàng)目中。在C語言中,原始解析JSON數(shù)據(jù)格式也是一項(xiàng)重要的任務(wù)。
JSON數(shù)據(jù)格式使用鍵值對(duì)的形式表示,其中鍵是一個(gè)字符串,值可以是數(shù)字、字符串、布爾值、數(shù)組、對(duì)象等。以下是JSON數(shù)據(jù)格式的一個(gè)例子:
{ "name": "張三", "age": 20, "hobbies": [ "游泳", "跑步" ], "isMale": true, "address": { "province": "北京", "city": "北京市", "street": "朝陽區(qū)" } }
在C語言中,可以使用一些開源的JSON解析庫來解析JSON數(shù)據(jù)格式,例如 cJSON。
首先,需要將JSON數(shù)據(jù)格式轉(zhuǎn)換成C語言中的字符串,然后使用cJSON_Parse函數(shù)將其解析成cJSON結(jié)構(gòu)體。
char *json_str = "{\"name\": \"張三\", \"age\": 20, \"hobbies\": [\"游泳\", \"跑步\"], \"isMale\": true, \"address\": {\"province\": \"北京\", \"city\": \"北京市\(zhòng)", \"street\": \"朝陽區(qū)\"}}"; cJSON *json = cJSON_Parse(json_str);
使用cJSON_GetObjectItemCaseSensitive函數(shù)可以獲取JSON數(shù)據(jù)格式中的值。
cJSON *name = cJSON_GetObjectItemCaseSensitive(json, "name"); char *name_value = name->valuestring; printf("姓名:%s\n", name_value);
可以使用cJSON_IsArray函數(shù)判斷是否是一個(gè)數(shù)組,使用cJSON_IsObject函數(shù)判斷是否是一個(gè)對(duì)象。
cJSON *hobbies = cJSON_GetObjectItemCaseSensitive(json, "hobbies"); if (cJSON_IsArray(hobbies)) { printf("興趣愛好:\n"); int array_size = cJSON_GetArraySize(hobbies); for (int i = 0; i< array_size; i++) { cJSON *hobby = cJSON_GetArrayItem(hobbies, i); char *hobby_value = hobby->valuestring; printf("%s\n", hobby_value); } }
以上就是使用C語言原始解析JSON數(shù)據(jù)格式的基本流程。