JSON(JavaScript Object Notation)是一種輕量級(jí)的數(shù)據(jù)交換格式,隨著移動(dòng)互聯(lián)網(wǎng)的普及,越來(lái)越多的應(yīng)用程序采用JSON格式的數(shù)據(jù)進(jìn)行數(shù)據(jù)交互。而C語(yǔ)言是一門(mén)強(qiáng)大的編程語(yǔ)言,很多嵌入式系統(tǒng)和操作系統(tǒng)都使用C語(yǔ)言編寫(xiě)。那么,在C語(yǔ)言中,如何將JSON數(shù)據(jù)存入數(shù)據(jù)庫(kù)呢?
#include#include #include #include int main(){ MYSQL *conn; //定義MySQL連接對(duì)象 MYSQL_RES *res; //定義結(jié)果集對(duì)象 MYSQL_ROW row; //定義行對(duì)象 char *server = "localhost"; //數(shù)據(jù)庫(kù)所在服務(wù)器地址 char *user = "root"; //連接數(shù)據(jù)庫(kù)的用戶名 char *password = "123456"; //連接數(shù)據(jù)庫(kù)的密碼 char *database = "test"; //使用的數(shù)據(jù)庫(kù)名 char sql[1024]; //SQL語(yǔ)句 cJSON *json; //定義cJSON對(duì)象 const char *str = "{\"name\":\"Tom\",\"age\":18,\"gender\":\"male\"}"; //JSON格式的字符串 char *name, *gender; //定義字符串變量 int age; //定義整形變量 conn = mysql_init(NULL); //初始化MySQL連接對(duì)象 if(!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0)){ printf("連接數(shù)據(jù)庫(kù)失敗:%s\n", mysql_error(conn)); exit(1); //連接失敗,退出程序 } json = cJSON_Parse(str); //將JSON格式的字符串解析為cJSON對(duì)象 name = cJSON_GetObjectItem(json, "name")->valuestring; //獲取name屬性值 age = cJSON_GetObjectItem(json, "age")->valueint; //獲取age屬性值 gender = cJSON_GetObjectItem(json, "gender")->valuestring; //獲取gender屬性值 sprintf(sql, "INSERT INTO student(name, age, gender) VALUES('%s', %d, '%s')", name, age, gender); //拼接SQL語(yǔ)句 if(mysql_query(conn, sql)){ printf("插入數(shù)據(jù)失敗:%s\n", mysql_error(conn)); exit(1); //插入失敗,退出程序 } mysql_close(conn); //關(guān)閉MySQL連接 return 0; }
上面的代碼演示了如何利用cJSON庫(kù)來(lái)解析JSON格式的字符串,并將解析出來(lái)的內(nèi)容存入數(shù)據(jù)庫(kù)。首先,需要初始化MySQL連接對(duì)象,使用mysql_real_connect()函數(shù)連接數(shù)據(jù)庫(kù)。然后,利用cJSON_Parse()函數(shù)將JSON格式的字符串解析為cJSON對(duì)象,再使用cJSON_GetObjectItem()函數(shù)獲取JSON中的各個(gè)屬性值。最后,使用sprintf()函數(shù)拼接SQL語(yǔ)句,并使用mysql_query()函數(shù)執(zhí)行SQL語(yǔ)句。
總之,在C語(yǔ)言中操作JSON和數(shù)據(jù)庫(kù)需要依賴相應(yīng)的庫(kù),其中cJSON和MySQL是兩個(gè)比較常用的庫(kù)。