C語(yǔ)言中可以使用mysql.h庫(kù)實(shí)現(xiàn)數(shù)據(jù)庫(kù)的查詢,并將查詢結(jié)果以json數(shù)據(jù)類型返回。
首先需要連接數(shù)據(jù)庫(kù),并進(jìn)行查詢操作,如下所示:
MYSQL* mysql = mysql_init(NULL); MYSQL_RES* res; MYSQL_ROW row; char* query = "SELECT * FROM table"; mysql_real_connect(mysql, "localhost", "user", "password", "database", 0, NULL, 0); mysql_query(mysql, query); res = mysql_store_result(mysql);
上述代碼連接本地?cái)?shù)據(jù)庫(kù),用戶名為user,密碼為password,查詢的數(shù)據(jù)庫(kù)為database中的table表,并將查詢結(jié)果存儲(chǔ)在res中。
接下來(lái)需要將查詢結(jié)果轉(zhuǎn)換為json數(shù)據(jù)類型,可以使用json-c庫(kù)中的json_object類型,如下所示:
json_object* jobj = json_object_new_object(); int num_fields = mysql_num_fields(res); while ((row = mysql_fetch_row(res))) { json_object* jsub_obj = json_object_new_object(); for (int i = 0; i< num_fields; i++) { json_object* jvalue = json_object_new_string(row[i]); json_object_object_add(jsub_obj, mysql_fetch_field_direct(res, i)->name, jvalue); } json_object_array_add(jobj, jsub_obj); }
上述代碼使用json_object_new_object()創(chuàng)建一個(gè)空的json對(duì)象,然后使用mysql_num_fields()獲取查詢結(jié)果中的列數(shù),使用mysql_fetch_row()遍歷查詢結(jié)果中的每一行,并使用json_object_new_object()創(chuàng)建一個(gè)空的json子對(duì)象。最后使用mysql_fetch_field_direct()獲取每一列的列名,將列名和列值構(gòu)建成json鍵值對(duì),并使用json_object_array_add()將json子對(duì)象添加到j(luò)son對(duì)象中。
最后需要將json對(duì)象轉(zhuǎn)換為json字符串,可以使用json-c庫(kù)中的json_object_to_json_string()函數(shù),如下所示:
char* json_str = json_object_to_json_string(jobj); printf("%s", json_str);
上述代碼使用json_object_to_json_string()將json對(duì)象轉(zhuǎn)換為json字符串,并使用printf()輸出json字符串。