在使用C語(yǔ)言解析微信JSON數(shù)據(jù)時(shí),可以用到cJSON的庫(kù)。該庫(kù)可以快速的解析JSON數(shù)據(jù),且其API簡(jiǎn)單易懂,使用方便。這里我們以微信公眾號(hào)消息模板為例,演示一下如何使用C語(yǔ)言解析JSON數(shù)據(jù)。
//首先需要引入cJSON的頭文件 #include "cJSON.h" //定義json字符串示例 char * jsonstr = "{\"touser\":\"oXrAXxxxx\",\ \"template_id\":\"J8vZLxxxxx\",\ \"url\":\"http://weixin.qq.com/download\",\ \"data\":{\ \"first\":{\ \"value\":\"恭喜你購(gòu)買成功!\",\ \"color\":\"#173177\"\ },\ \"keyword1\":{\ \"value\":\"巧克力\",\ \"color\":\"\"\ },\ \"keyword2\":{\ \"value\":\"39.8元\",\ \"color\":\"\"\ },\ \"keyword3\":{\ \"value\":\"2014年9月22日\(chéng)",\ \"color\":\"\"\ },\ \"remark\":{\ \"value\":\"歡迎再次購(gòu)買!\",\ \"color\":\"#173177\"\ }\ }\ }"; int main() { // 使用cJSON庫(kù)解析json字符串 cJSON * root = cJSON_Parse(jsonstr); if (!root) { printf("Parsing of jsonstr failed!"); return 1; } // 獲取json數(shù)據(jù)中的元素 cJSON* touser = cJSON_GetObjectItem(root, "touser"); printf("touser: %s\n", touser->valuestring); cJSON* template_id = cJSON_GetObjectItem(root, "template_id"); printf("template_id: %s\n", template_id->valuestring); cJSON* url = cJSON_GetObjectItem(root, "url"); printf("url: %s\n", url->valuestring); cJSON* data = cJSON_GetObjectItem(root, "data"); // 循環(huán)讀取json數(shù)組中的元素 cJSON* cjson_slice = NULL; cJSON_ArrayForEach(cjson_slice, data) { // 打印每一個(gè)元素 printf("%s:%s\n", cjson_slice->string, cJSON_Print(cjson_slice)); } cJSON_Delete(root); return 0; }
上述代碼通過(guò)cJSON_Parse解析json字符串,并通過(guò)cJSON_GetObjectItem獲取json數(shù)據(jù)中的元素,同時(shí)通過(guò)cJSON_ArrayForEach循環(huán)讀取json數(shù)組中的每一個(gè)元素。可以根據(jù)獲取到的元素的屬性打印出其值。解析JSON數(shù)據(jù)的過(guò)程在C語(yǔ)言中使用cJSON非常簡(jiǎn)便,讓程序員可以通過(guò)這個(gè)接口,更簡(jiǎn)單更快速地解析JSON數(shù)據(jù)了。