c 數(shù)據(jù)庫(kù)是一種常用的數(shù)據(jù)庫(kù),可以存儲(chǔ)各種數(shù)據(jù),包括 JSON 數(shù)據(jù)。下面介紹如何使用 c 數(shù)據(jù)庫(kù)存儲(chǔ) JSON 數(shù)據(jù)。
首先,需要在代碼中引入 cJSON 庫(kù)(可以在GitHub上下載)。cJSON 是一個(gè)開源的 C 語(yǔ)言 JSON 解析器,可以將 JSON 字符串解析成 C 語(yǔ)言的數(shù)據(jù)結(jié)構(gòu),也可以將 C 語(yǔ)言的數(shù)據(jù)結(jié)構(gòu)序列化成 JSON 字符串。
#include "cJSON.h"
接下來(lái),可以使用 cJSON_Parse 函數(shù)將 JSON 字符串解析成 cJSON 對(duì)象:
char *json_str = "{\"name\":\"John\", \"age\":30, \"city\":\"New York\"}"; cJSON *json = cJSON_Parse(json_str);
這里的 json_str 是一個(gè) JSON 字符串,json 是一個(gè) cJSON 對(duì)象。
可以使用 cJSON_GetObjectItem 函數(shù)獲取 cJSON 對(duì)象中的屬性值:
cJSON *name = cJSON_GetObjectItem(json, "name"); cJSON *age = cJSON_GetObjectItem(json, "age"); cJSON *city = cJSON_GetObjectItem(json, "city");
這里的 name、age、city 都是 cJSON 對(duì)象。
可以將 cJSON 對(duì)象中的屬性值存儲(chǔ)到 c 數(shù)據(jù)庫(kù)中:
sqlite3 *db; sqlite3_open("test.db", &db); char *sql = "CREATE TABLE IF NOT EXISTS person (name TEXT, age INT, city TEXT);"; sqlite3_exec(db, sql, NULL, NULL, NULL); sql = "INSERT INTO person (name, age, city) VALUES (?, ?, ?)"; sqlite3_stmt *stmt; sqlite3_prepare_v2(db, sql, -1, &stmt, NULL); sqlite3_bind_text(stmt, 1, name->valuestring, -1, NULL); sqlite3_bind_int(stmt, 2, age->valueint); sqlite3_bind_text(stmt, 3, city->valuestring, -1, NULL); sqlite3_step(stmt); sqlite3_finalize(stmt); sqlite3_close(db);
這里創(chuàng)建了一個(gè) person 表,存儲(chǔ)了每個(gè)人的姓名、年齡、城市。使用 sqlite3_prepare_v2 函數(shù)來(lái)編譯 SQL 語(yǔ)句,然后使用 sqlite3_bind_xxx 函數(shù)來(lái)綁定參數(shù)。最后執(zhí)行 SQL 語(yǔ)句。
可以使用 cJSON_Delete 函數(shù)釋放 cJSON 對(duì)象的內(nèi)存:
cJSON_Delete(json);
這樣就完成了將 JSON 數(shù)據(jù)存儲(chǔ)到 c 數(shù)據(jù)庫(kù)中的過(guò)程。