C 是一種常用的編程語言,被廣泛應用于系統(tǒng)編程、游戲開發(fā)、數(shù)據(jù)庫管理等領域。在數(shù)據(jù)庫管理方面,C 也有著重要的作用,例如將 JSON 數(shù)據(jù)存儲到數(shù)據(jù)庫實例中。
JSON(JavaScript Object Notation)是一種常用的輕量級數(shù)據(jù)交換格式,具有可讀性強、格式簡潔、易于解析等特點,因此被廣泛應用于 Web 應用程序中。而數(shù)據(jù)庫則是一種結構化數(shù)據(jù)存儲方式,常用于存儲大量數(shù)據(jù)以供后續(xù)查詢和使用。將 JSON 數(shù)據(jù)存儲到數(shù)據(jù)庫實例中,可以方便地進行數(shù)據(jù)分析和管理。
#include <stdio.h>
#include <mysql.h>
#include <jansson.h>
int main() {
// 連接數(shù)據(jù)庫
MYSQL mysql;
mysql_init(&mysql);
mysql_real_connect(&mysql, "localhost", "root", "password", "testdb", 3306, NULL, 0);
// 解析 JSON 數(shù)據(jù)
char *json_str = "{\"name\":\"Amy\",\"age\":23,\"gender\":\"female\"}";
json_error_t json_err;
json_t *json_root = json_loads(json_str, 0, &json_err);
// 將 JSON 數(shù)據(jù)存儲到數(shù)據(jù)庫中
char query[255];
sprintf(query, "INSERT INTO person(name, age, gender) VALUES(\"%s\", %d, \"%s\")", json_string_value(json_object_get(json_root, "name")), json_integer_value(json_object_get(json_root, "age")), json_string_value(json_object_get(json_root, "gender")));
mysql_query(&mysql, query);
// 釋放資源
json_decref(json_root);
mysql_close(&mysql);
return 0;
}
在代碼中,我們首先連接了數(shù)據(jù)庫。使用 mysql_init 函數(shù)初始化一個 MYSQL 結構指針,然后使用 mysql_real_connect 函數(shù)連接到 testdb 數(shù)據(jù)庫。輸入正確的數(shù)據(jù)庫地址、用戶名、密碼、端口號和數(shù)據(jù)庫名后,就能成功連接到數(shù)據(jù)庫。接下來,我們使用 json_loads 函數(shù)解析 JSON 數(shù)據(jù),并獲取其中的字段值。代碼中給出的 JSON 數(shù)據(jù)是一個包含 name、age 和 gender 字段的 JSON 對象。然后,我們使用 sprintf 函數(shù)生成 SQL 查詢語句,格式為 "INSERT INTO person(name, age, gender) VALUES(\"%s\", %d, \"%s\")"。其中使用了 json_string_value、json_integer_value 和 json_object_get 函數(shù)獲取 JSON 對象中的字段值。最后,我們調用 mysql_query 函數(shù)執(zhí)行 SQL 語句,并釋放資源。
以上代碼僅僅是一個示例,仍然需要根據(jù)實際情況進行修改。例如,要想將多個 JSON 對象批量存儲到數(shù)據(jù)庫中,可以使用循環(huán)遍歷每個 JSON 對象并執(zhí)行 SQL 語句。同時,還需要保證數(shù)據(jù)格式的正確性,例如確保 JSON 數(shù)據(jù)中的字段和表格中的列名一致等。