C語言有很多種實現(xiàn)JSON解析的庫,但是對于某些應(yīng)用來說,使用完整的庫可能太過笨重和復(fù)雜。對于這些情況,C語言提供了另外一種解析JSON的方式,那就是解析JSON地址字符串。
JSON地址字符串是指在JSON對象中,使用“/”引導(dǎo)的一個字符串,表示了要訪問的某個屬性值。
{ "name": "Tom", "age": 18, "gender": true, "address": { "province": "Beijing", "city": "Beijing" } }
比如,上面的JSON對象中,要訪問“address”對象中的“city”屬性,可以使用地址字符串“/address/city”。
使用C語言解析JSON地址字符串,代碼如下:
#include <stdio.h> #include <string.h> void parseJSON(char* json, char* address) { char* token = strtok(address, "/"); while(token != NULL) { json = strstr(json, token); if(json == NULL) { printf("Not Found!\n"); return; } json += strlen(token) + 1; token = strtok(NULL, "/"); } json -= strlen(token) + 1; char* value = strchr(json, '\"'); printf("%.*s\n", (int)(strchr(value + 1, '\"') - value - 1), value + 1); } int main() { char json[] = "{\"name\":\"Tom\",\"age\":18,\"gender\":true,\"address\":{\"province\":\"Beijing\",\"city\":\"Beijing\"}}"; char address[] = "/address/city"; parseJSON(json, address); return 0; }
上面的代碼中,parseJSON函數(shù)接收兩個參數(shù),一個是要解析的JSON字符串,另一個是地址字符串。函數(shù)內(nèi)部使用strtok和strstr函數(shù)逐級訪問該地址,最后找到對應(yīng)的屬性值,并輸出給調(diào)用者。
對于訪問JSON屬性時未找到對應(yīng)值的情況,parseJSON函數(shù)輸出“Not Found!”。
使用C語言解析JSON地址字符串,雖然比使用完整的JSON解析庫更加靈活、精簡,但是需要手動解析,邏輯較為繁瑣,請根據(jù)實際需求選擇。