最近在使用C語(yǔ)言進(jìn)行JSON請(qǐng)求處理時(shí),發(fā)現(xiàn)一個(gè)奇怪的問(wèn)題:請(qǐng)求返回的JSON里居然多了兩個(gè)轉(zhuǎn)義符!
查看代碼后發(fā)現(xiàn),這個(gè)問(wèn)題是因?yàn)槲覀兪褂玫腸URL庫(kù)默認(rèn)會(huì)把接收到的數(shù)據(jù)視為字符串,而不是JSON類型。于是,在把它解析后輸出時(shí),它會(huì)自動(dòng)把字符串里的反斜杠進(jìn)行轉(zhuǎn)義,這就導(dǎo)致了這個(gè)問(wèn)題的出現(xiàn)。
解決這個(gè)問(wèn)題也非常簡(jiǎn)單,我們只需要在cURL請(qǐng)求時(shí)通過(guò)設(shè)置HTTP頭部的方式告訴服務(wù)器我們期望得到的是JSON數(shù)據(jù),而非字符串。代碼如下所示:
// 定義HTTP頭部 struct curl_slist *headers = NULL; headers = curl_slist_append(headers, "Content-Type: application/json"); // 設(shè)置HTTP頭部 curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); // 執(zhí)行請(qǐng)求操作...
以上代碼就是我們?cè)O(shè)置cURL請(qǐng)求返回JSON數(shù)據(jù)的方式。這樣,在解析JSON返回結(jié)果時(shí),就不會(huì)出現(xiàn)多余的轉(zhuǎn)義符了。
總體來(lái)說(shuō),這個(gè)問(wèn)題雖然看起來(lái)不是很嚴(yán)重,但是卻可能會(huì)影響JSON的解析,導(dǎo)致程序出現(xiàn)異常行為。因此,我們需要在程序設(shè)計(jì)時(shí)特別注意這個(gè)問(wèn)題的出現(xiàn),以免給自己帶來(lái)更大的麻煩。