新聞中心
在現(xiàn)代軟件開發(fā)中,ON成為一種非常常見的數(shù)據(jù)格式,它被廣泛應(yīng)用于Web應(yīng)用之中。而數(shù)據(jù)庫(kù)實(shí)體則是Web應(yīng)用中常用的數(shù)據(jù)持久化方式,因此將ON轉(zhuǎn)換為數(shù)據(jù)庫(kù)實(shí)體是一項(xiàng)非常有用的技術(shù)。本文將介紹如何使用。

創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站、蘭西網(wǎng)絡(luò)推廣、重慶小程序開發(fā)公司、蘭西網(wǎng)絡(luò)營(yíng)銷、蘭西企業(yè)策劃、蘭西品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供蘭西建站搭建服務(wù),24小時(shí)服務(wù)熱線:028-86922220,官方網(wǎng)址:www.cdcxhl.com
1. ON簡(jiǎn)介
ON(JavaScript Object Notation)是一種輕量級(jí)的數(shù)據(jù)交換格式,它基于JavaScript語(yǔ)言的一個(gè)子集。ON數(shù)據(jù)格式支持基本數(shù)據(jù)類型、數(shù)組和對(duì)象,在Web應(yīng)用中扮演著重要的角色。下面是一個(gè)ON的示例:
“`
{
“name”: “Jack”,
“age”: 20,
“hobbies”: [“reading”, “swimming”, “travel”],
“address”: {
“province”: “Jiangsu”,
“city”: “Suzhou”,
“street”: “SIP”
}
}
“`
2. 數(shù)據(jù)庫(kù)實(shí)體介紹
數(shù)據(jù)庫(kù)實(shí)體(Database Entity)是數(shù)據(jù)庫(kù)中的一個(gè)概念,它代表一個(gè)實(shí)物或一個(gè)概念。在Web應(yīng)用中,通常將數(shù)據(jù)庫(kù)實(shí)體視為應(yīng)用程序中的模型。下面是一個(gè)用戶實(shí)體(User)的示例:
“`
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(32) NOT NULL,
`age` int(11) NOT NULL,
`hobbies` text NOT NULL,
`province` varchar(32) NOT NULL,
`city` varchar(32) NOT NULL,
`street` varchar(32) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
“`
3. C語(yǔ)言解析ON
C語(yǔ)言作為一種高效的編程語(yǔ)言,被廣泛應(yīng)用于系統(tǒng)和嵌入式開發(fā)。下面將介紹如何使用C語(yǔ)言解析ON并將其映射到數(shù)據(jù)庫(kù)實(shí)體中。
我們需要使用第三方庫(kù)cON來(lái)處理ON數(shù)據(jù)。cON是一種輕量級(jí)的ON解析庫(kù),它提供了一組簡(jiǎn)單的API來(lái)解析ON數(shù)據(jù)。我們可以在GitHub上下載cON,并將其包含在我們的代碼中。
接下來(lái),我們需要定義一個(gè)數(shù)據(jù)結(jié)構(gòu)來(lái)表示用戶實(shí)體。這里我們使用結(jié)構(gòu)體來(lái)表示,結(jié)構(gòu)體的成員與用戶實(shí)體中的字段對(duì)應(yīng)。代碼如下:
“`c
typedef struct {
int id;
char *name;
int age;
char *hobbies[MAX_HOBBY_COUNT];
char *province;
char *city;
char *street;
} User;
“`
在實(shí)現(xiàn)ON解析之前,我們需要先實(shí)現(xiàn)一些輔助函數(shù)。這些函數(shù)將用于分配和釋放內(nèi)存、解析和設(shè)置用戶實(shí)體中的字段。這里我們只列出部分函數(shù)的實(shí)現(xiàn)。
“`c
User *new_user(void) {
User *user = (User *) malloc(sizeof(User));
user->id = 0;
user->name = NULL;
user->age = 0;
user->province = NULL;
user->city = NULL;
user->street = NULL;
memset(user->hobbies, 0, sizeof(user->hobbies));
return user;
}
void delete_user(User *user) {
if (user != NULL) {
if (user->name != NULL) free(user->name);
for (int i = 0; i
if (user->hobbies[i] != NULL) free(user->hobbies[i]);
}
if (user->province != NULL) free(user->province);
if (user->city != NULL) free(user->city);
if (user->street != NULL) free(user->street);
free(user);
}
}
void set_name(User *user, const char *name) {
int len = strlen(name);
user->name = (char *) malloc(len + 1);
strcpy(user->name, name);
}
void set_age(User *user, int age) {
user->age = age;
}
void add_hobby(User *user, const char *hobby) {
for (int i = 0; i
if (user->hobbies[i] == NULL) {
int len = strlen(hobby);
user->hobbies[i] = (char *) malloc(len + 1);
strcpy(user->hobbies[i], hobby);
break;
}
}
}
void set_province(User *user, const char *province) {
int len = strlen(province);
user->province = (char *) malloc(len + 1);
strcpy(user->province, province);
}
void set_city(User *user, const char *city) {
int len = strlen(city);
user->city = (char *) malloc(len + 1);
strcpy(user->city, city);
}
void set_street(User *user, const char *street) {
int len = strlen(street);
user->street = (char *) malloc(len + 1);
strcpy(user->street, street);
}
“`
接下來(lái),我們需要實(shí)現(xiàn)一個(gè)函數(shù),該函數(shù)將ON數(shù)據(jù)解析為用戶實(shí)體。我們可以遞歸地遍歷ON數(shù)據(jù),并在適當(dāng)時(shí)候調(diào)用輔助函數(shù)來(lái)設(shè)置用戶實(shí)體中的字段。
“`c
User *parse_user(cON *json) {
User *user = new_user();
if (json == NULL) return user;
cON *item;
item = cON_GetObjectItem(json, “id”);
if (item != NULL) {
user->id = item->valueint;
}
item = cON_GetObjectItem(json, “name”);
if (item != NULL) {
set_name(user, item->valuestring);
}
item = cON_GetObjectItem(json, “age”);
if (item != NULL) {
set_age(user, item->valueint);
}
item = cON_GetObjectItem(json, “hobbies”);
if (item != NULL && item->type == cON_Array) {
int size = cON_GetArraySize(item);
for (int i = 0; i
cON *hobby = cON_GetArrayItem(item, i);
if (hobby != NULL && hobby->type == cON_String) {
add_hobby(user, hobby->valuestring);
}
}
}
item = cON_GetObjectItem(json, “address”);
if (item != NULL && item->type == cON_Object) {
cON *province = cON_GetObjectItem(item, “province”);
cON *city = cON_GetObjectItem(item, “city”);
cON *street = cON_GetObjectItem(item, “street”);
if (province != NULL && province->type == cON_String) {
set_province(user, province->valuestring);
}
if (city != NULL && city->type == cON_String) {
set_city(user, city->valuestring);
}
if (street != NULL && street->type == cON_String) {
set_street(user, street->valuestring);
}
}
return user;
}
“`
我們需要實(shí)現(xiàn)一個(gè)函數(shù),該函數(shù)將解析出的用戶實(shí)體保存到數(shù)據(jù)庫(kù)中。這里我們使用MySQL數(shù)據(jù)庫(kù),使用MySQL C API來(lái)訪問(wèn)數(shù)據(jù)庫(kù)。
“`c
void save_user(User *user) {
MYSQL mysql;
mysql_init(&mysql);
if (mysql_real_connect(&mysql, “l(fā)ocalhost”, “root”, “”, “test”, 0, NULL, 0)) {
char sql[1024];
snprintf(sql, sizeof(sql), “INSERT INTO `user`(`name`, `age`, `hobbies`, `province`, `city`, `street`) VALUES(‘%s’, %d, ‘%s’, ‘%s’, ‘%s’, ‘%s’)”,
user->name, user->age, join_strings(user->hobbies, MAX_HOBBY_COUNT), user->province, user->city, user->street);
mysql_query(&mysql, sql);
mysql_close(&mysql);
}
}
“`
我們可以將以上代碼組合成一個(gè)完整的示例,以下是完整的代碼。
相關(guān)問(wèn)題拓展閱讀:
- 解決方法:STM32使用cON解析數(shù)據(jù)失敗
- 如何把獲取的json數(shù)據(jù)插入數(shù)據(jù)庫(kù)
解決方法:STM32使用cON解析數(shù)據(jù)失敗
在 STM32 移植 cON 庫(kù)后羨卜,使用 cON_Parse() ,解析失敗。
使用 cON_GetErrorPtr() 分析出以下錯(cuò)誤:
而當(dāng)去掉 serial_no 字段后,則能夠解析成功。
當(dāng)解析的的數(shù)據(jù)比較長(zhǎng)時(shí),會(huì)解析失敗,但褲中是短的數(shù)據(jù)則沒有問(wèn)題,后面排查是因?yàn)?cON 解析需要用到的內(nèi)存比較大,溢出導(dǎo)致解析失敗。
查看 STM32 啟動(dòng)文件。如 startup_stm32f407xx.s ,發(fā)現(xiàn):
增大空間后,問(wèn)題解決
? 由 Leung 寫于 2023 年 6 月 30 日
? 參考: STM32工程使用cjson庫(kù)解析數(shù)據(jù)失敗的原兄純穗因
如何把獲取的json數(shù)據(jù)插入數(shù)據(jù)庫(kù)
特點(diǎn):
它們可以處理超大量的數(shù)據(jù)。
它們運(yùn)行在便宜的PC服務(wù)器集群上。
PC集群擴(kuò)充起來(lái)非常方便并且成本很低,避免了“sharding”操作的復(fù)雜性和成本。
它們擊碎了性能瓶頸。
NoSQL的支持者稱,通過(guò)NoSQL架構(gòu)可以省去將Web或Java應(yīng)用和數(shù)據(jù)轉(zhuǎn)換成SQL友好格式的時(shí)間,執(zhí)行速度變得更快。
“SQL并非適用于所有的程序代碼,” 對(duì)于那些繁重的重復(fù)操作的數(shù)據(jù),SQL值得花錢。但是當(dāng)數(shù)據(jù)庫(kù)結(jié)構(gòu)非常簡(jiǎn)單時(shí),SQL可能沒有太大用處。
沒有過(guò)多的操作。
雖然NoSQL的支持者也承認(rèn)關(guān)系數(shù)據(jù)庫(kù)提供了無(wú)可比擬的功能,而且在數(shù)據(jù)完整性上也發(fā)揮絕對(duì)穩(wěn)定,他們同時(shí)也表示,企業(yè)的具體需求可能沒有那么多。
Bootstrap支持
因?yàn)镹oSQL項(xiàng)目都是開源的,因此它們?nèi)狈?yīng)晌羨商提供的正式支持。這一點(diǎn)它們與大多數(shù)開源項(xiàng)目一樣,不得不從社區(qū)中尋求支持。
優(yōu)點(diǎn):
易擴(kuò)展
NoSQL數(shù)據(jù)庫(kù)種類繁多,但是一個(gè)共同的特點(diǎn)都是去掉關(guān)系數(shù)據(jù)庫(kù)的關(guān)系型特性。數(shù)據(jù)之間無(wú)關(guān)系,這樣就非常容易擴(kuò)展。也無(wú)形之間,在架構(gòu)的層面上帶來(lái)了可擴(kuò)展的能力。
大數(shù)據(jù)量,高性能
NoSQL數(shù)據(jù)庫(kù)都具有非常高的讀寫性能,尤其在大數(shù)據(jù)量下,同樣表現(xiàn)優(yōu)秀。這得益于它的無(wú)關(guān)系性,數(shù)據(jù)庫(kù)的結(jié)構(gòu)簡(jiǎn)單。一般MySQL使用 Query Cache,每次表的更新Cache就失效,是一種大粒度的Cache,在針對(duì)web2.0的交互頻繁的應(yīng)用,Cache性能不高。而NoSQL的 Cache是記錄級(jí)的,是一種細(xì)粒度的Cache,所以NoSQL在這個(gè)層面上來(lái)說(shuō)就要性能高很多察襪了。
靈活的數(shù)據(jù)模型
NoSQL無(wú)需事先為要存儲(chǔ)的數(shù)據(jù)建立字段,隨時(shí)可以存儲(chǔ)自定義的數(shù)據(jù)格式。而在關(guān)系數(shù)據(jù)庫(kù)里,增刪字段是一件非常麻煩的事情。如果是非常大數(shù)據(jù)量的表,增加字段簡(jiǎn)直就是一個(gè)噩夢(mèng)。這點(diǎn)在大數(shù)據(jù)量的web2.0時(shí)代尤其明顯。
高可用
NoSQL在不太影響性能的情況,就可以方便的實(shí)現(xiàn)高可用的架構(gòu)。比如Cassandra,HBase模型,通過(guò)復(fù)制模型也能實(shí)現(xiàn)高可用。
主要應(yīng)用:
Apache HBase
這個(gè)大數(shù)據(jù)管理平臺(tái)建立在谷歌強(qiáng)大的BigTable管理引擎基礎(chǔ)上。作為具有開源、Java編碼、分布式多個(gè)優(yōu)勢(shì)的數(shù)據(jù)庫(kù),Hbase最初被設(shè)計(jì)應(yīng)用于Hadoop平臺(tái),而這一強(qiáng)大的數(shù)據(jù)管理工具,也被Facebook采用,用于管理消息平臺(tái)的龐大數(shù)據(jù)。
Apache Storm
用于處理高速、大型數(shù)據(jù)流的分布式實(shí)時(shí)計(jì)算系統(tǒng)。Storm為Apache Hadoop添加了可靠的實(shí)時(shí)數(shù)據(jù)處理功能,同時(shí)還增加了低延遲的儀表板、安全警報(bào),改進(jìn)了原有的操作方式,幫助企業(yè)更有效率地捕獲商業(yè)機(jī)會(huì)、發(fā)展新業(yè)務(wù)。
Apache Spark
該技術(shù)采用內(nèi)存計(jì)算,從多迭代批量處理出發(fā),允許將數(shù)據(jù)載入內(nèi)存做反復(fù)查詢,此外還融合數(shù)據(jù)倉(cāng)庫(kù)、流處理和圖計(jì)算等多種計(jì)算范式,Spark用Scala語(yǔ)言實(shí)現(xiàn),構(gòu)建在HDFS上,能與Hadoop很好的結(jié)合,而且運(yùn)行速度比MapRece快100倍。
Apache Hadoop
該技術(shù)迅速成為了大數(shù)據(jù)管理標(biāo)準(zhǔn)之一。當(dāng)它被用來(lái)管理大型數(shù)據(jù)集時(shí),對(duì)于復(fù)雜的分布式應(yīng)用,宴沒拍Hadoop體現(xiàn)出了非常好的性能,平臺(tái)的靈活性使它可以運(yùn)行在商用硬件系統(tǒng),它還可以輕松地集成結(jié)構(gòu)化、半結(jié)構(gòu)化和甚至非結(jié)構(gòu)化數(shù)據(jù)集。
Apache Drill
你有多大的數(shù)據(jù)集?其實(shí)無(wú)論你有多大的數(shù)據(jù)集,Drill都能輕松應(yīng)對(duì)。通過(guò)支持HBase、Cassandra和MongoDB,Drill建立了交互式分析平臺(tái),允許大規(guī)模數(shù)據(jù)吞吐,而且能很快得出結(jié)果。
Apache Sqoop
也許你的數(shù)據(jù)現(xiàn)在還被鎖定于舊系統(tǒng)中,Sqoop可以幫你解決這個(gè)問(wèn)題。這一平臺(tái)采用并發(fā)連接,可以將數(shù)據(jù)從關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)方便地轉(zhuǎn)移到Hadoop中,可以自定義數(shù)據(jù)類型以及元數(shù)據(jù)傳播的映射。事實(shí)上,你還可以將數(shù)據(jù)(如新的數(shù)據(jù))導(dǎo)入到HDFS、Hive和Hbase中。
Apache Giraph
這是功能強(qiáng)大的圖形處理平臺(tái),具有很好可擴(kuò)展性和可用性。該技術(shù)已經(jīng)被Facebook采用,Giraph可以運(yùn)行在Hadoop環(huán)境中,可以將它直接部署到現(xiàn)有的Hadoop系統(tǒng)中。通過(guò)這種方式,你可以得到強(qiáng)大的分布式作圖能力,同時(shí)還能利用上現(xiàn)有的大數(shù)據(jù)處理引擎。
Cloudera Impala
Impala模型也可以部署在你現(xiàn)有的Hadoop群集上,監(jiān)視所有的查詢。該技術(shù)和MapRece一樣,具有強(qiáng)大的批處理能力,而且Impala對(duì)于實(shí)時(shí)的SQL查詢也有很好的效果,通過(guò)高效的SQL查詢,你可以很快的了解到大數(shù)據(jù)平臺(tái)上的數(shù)據(jù)。
Gephi
它可以用來(lái)對(duì)信息進(jìn)行關(guān)聯(lián)和量化處理,通過(guò)為數(shù)據(jù)創(chuàng)建功能強(qiáng)大的可視化效果,你可以從數(shù)據(jù)中得到不一樣的洞察力。Gephi已經(jīng)支持多個(gè)圖表類型,而且可以在具有上百萬(wàn)個(gè)節(jié)點(diǎn)的大型網(wǎng)絡(luò)上運(yùn)行。Gephi具有活躍的用戶社區(qū),Gephi還提供了大量的插件,可以和現(xiàn)有系統(tǒng)完美的集成到一起,它還可以對(duì)復(fù)雜的IT連接、分布式系統(tǒng)中各個(gè)節(jié)點(diǎn)、數(shù)據(jù)流等信息進(jìn)行可視化分析。
關(guān)于c json解析到數(shù)據(jù)庫(kù)實(shí)體的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
成都創(chuàng)新互聯(lián)建站主營(yíng):成都網(wǎng)站建設(shè)、網(wǎng)站維護(hù)、網(wǎng)站改版的網(wǎng)站建設(shè)公司,提供成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、成都網(wǎng)站推廣、成都網(wǎng)站優(yōu)化seo、響應(yīng)式移動(dòng)網(wǎng)站開發(fā)制作等網(wǎng)站服務(wù)。
本文題目:C語(yǔ)言實(shí)現(xiàn)ON到數(shù)據(jù)庫(kù)實(shí)體的解析(cjson解析到數(shù)據(jù)庫(kù)實(shí)體)
轉(zhuǎn)載源于:http://m.5511xx.com/article/dheppdp.html


咨詢
建站咨詢
