在C語(yǔ)言中,我們經(jīng)常會(huì)用到返回JSON格式數(shù)據(jù)的函數(shù)。但是,有時(shí)候我們會(huì)發(fā)現(xiàn)返回的結(jié)果里面雙引號(hào)會(huì)被轉(zhuǎn)義成“\”加雙引號(hào)的形式。這種情況很可能會(huì)導(dǎo)致我們?cè)谑褂眠@個(gè)JSON數(shù)據(jù)時(shí)出現(xiàn)各種問(wèn)題。
例如,一段JSON數(shù)據(jù)可能長(zhǎng)這樣: { "name": "小明", "age": 18, "address": { "country": "China", "city": "Shanghai" } } 但是,如果我們返回的結(jié)果中存在雙引號(hào)轉(zhuǎn)義的情況,可能會(huì)變成這樣: "{\"name\":\"小明\",\"age\":18,\"address\":{\"country\":\"China\",\"city\":\"Shanghai\"}}" 這樣的結(jié)果會(huì)給我們后續(xù)的操作造成困難。
解決這個(gè)問(wèn)題的方法其實(shí)也很簡(jiǎn)單,只需要在生成JSON數(shù)據(jù)的時(shí)候,使用相應(yīng)的庫(kù)函數(shù)來(lái)確保雙引號(hào)被正確編碼就可以了。
例如,在使用 cJSON 庫(kù)生成JSON數(shù)據(jù)時(shí),我們可以使用 cJSON_PrintUnformatted 函數(shù)來(lái)確保雙引號(hào)被正確編碼:
cJSON *root = cJSON_CreateObject(); cJSON_AddStringToObject(root, "name", "小明"); cJSON_AddNumberToObject(root, "age", 18); cJSON *address = cJSON_CreateObject(); cJSON_AddStringToObject(address, "country", "China"); cJSON_AddStringToObject(address, "city", "Shanghai"); cJSON_AddItemToObject(root, "address", address); char *json_str = cJSON_PrintUnformatted(root); printf("%s", json_str); // 輸出 {"name":"小明","age":18,"address":{"country":"China","city":"Shanghai"}} cJSON_Delete(root); free(json_str);
在生成JSON數(shù)據(jù)的時(shí)候,一定要注意雙引號(hào)的編碼問(wèn)題。這樣才能確保我們使用這個(gè)JSON數(shù)據(jù)時(shí)不會(huì)出現(xiàn)問(wèn)題。