CSON使用實例
聲明結(jié)構(gòu)體:
/** 項目結(jié)構(gòu)體 */
struct project
{
int id;
char *name;
};
/** 倉庫結(jié)構(gòu)體 */
struct hub
{
int id;
char *user;
struct project *cson;
};
定義數(shù)據(jù)模型:
對每一個需要使用cson的結(jié)構(gòu)體,都需要定義相對應(yīng)的數(shù)據(jù)模型
/** 項目結(jié)構(gòu)體數(shù)據(jù)模型 */
CsonModel projectModel[] =
{
CSON_MODEL_OBJ(struct project),
CSON_MODEL_INT(struct project, id),
CSON_MODEL_STRING(struct project, name),
};
/** 倉庫結(jié)構(gòu)體數(shù)據(jù)模型 */
CsonModel hubModel[] =
{
CSON_MODEL_OBJ(struct hub),
CSON_MODEL_INT(struct hub, id),
CSON_MODEL_STRING(struct hub, user),
CSON_MODEL_STRUCT(struct hub, cson, projectModel, sizeof(projectModel)/sizeof(CsonModel))
};
使用CSON解析:
只需要定義好數(shù)據(jù)模型,就可以使用CSON讀json進(jìn)行序列化和反序列化
void csonDemo(void)
{
char *jsonDemo = "{"id": 1, "user": "Letter", "cson": {"id": 2, "name": "cson"}}";
/** 解析json */
struct hub *pHub = csonDecode(jsonDemo, hubModel, sizeof(hubModel)/sizeof(CsonModel));
printf("hub: id: %d, user: %s, project id: %d, project name: %srn",
pHub- >id, pHub- >user, pHub- >cson- >id, pHub- >cson- >name);
/** 序列化對象 */
char *formatJson = csonEncodeFormatted(pHub, hubModel, sizeof(hubModel)/sizeof(CsonModel));
printf("format json: %srn", formatJson);
/** 釋放結(jié)構(gòu)體對象 */
csonFree(pHub, hubModel, sizeof(hubModel)/sizeof(CsonModel));
/** 釋放序列化生成的json字符串 */
csonFreeJson(formatJson);
}
運行結(jié)果:
hub: id: 1, user: Letter, project id: 2, project name: cson
format json: {
"id": 1,
"user": "Letter",
"cson": {
"id": 2,
"name": "cson"
}
}
可以看到,無論是解析json,還是序列化結(jié)構(gòu)體到j(luò)son,在使用CSON的情況下,都只需要一行代碼就可以解決,同樣的操作,在使用原生cJSON的情況下,你可能需要多次判斷,解析元素。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7003瀏覽量
88943 -
C語言
+關(guān)注
關(guān)注
180文章
7604瀏覽量
136697 -
模型
+關(guān)注
關(guān)注
1文章
3226瀏覽量
48809 -
結(jié)構(gòu)體
+關(guān)注
關(guān)注
1文章
130瀏覽量
10840
發(fā)布評論請先 登錄
相關(guān)推薦
基于面向?qū)ο?b class='flag-5'>數(shù)據(jù)模型的信息管理系統(tǒng)
探討了面向?qū)ο?b class='flag-5'>數(shù)據(jù)模型信息管理系統(tǒng)的結(jié)構(gòu)設(shè)計和信息管理系統(tǒng)實現(xiàn)技術(shù)。系統(tǒng)設(shè)計采用面向?qū)ο?b class='flag-5'>數(shù)據(jù)模型,數(shù)據(jù)庫結(jié)構(gòu)采用對象-關(guān)系數(shù)據(jù)庫。結(jié)合一個典型的教務(wù)信息管理系
發(fā)表于 02-21 11:35
?14次下載
什么是層次數(shù)據(jù)模型、數(shù)據(jù)流量分析
什么是層次數(shù)據(jù)模型
用層次結(jié)構(gòu)表示實體類型及實體間聯(lián)系的數(shù)據(jù)模型稱為層次數(shù)據(jù)模型(hierarchical datamodel)。層次結(jié)構(gòu)是樹結(jié)構(gòu),樹的結(jié)點是記錄類型,非根結(jié)點有且
發(fā)表于 06-17 08:13
?1564次閱讀
什么是ActiveDirectory數(shù)據(jù)模型、數(shù)字數(shù)據(jù)網(wǎng)絡(luò)
什么是ActiveDirectory數(shù)據(jù)模型
從 LDAP 數(shù)據(jù)模型演化而來的模型。該目錄用來保存對象,這些對象代表了由屬性描述的各種端口的實體。在架構(gòu)中定義了可以存儲在目錄中
發(fā)表于 06-17 08:13
?1089次閱讀
數(shù)據(jù)模型概念及類型劃分
數(shù)據(jù)(data)是描述事物的符號記錄。模型(Model)是現(xiàn)實世界的抽象。數(shù)據(jù)模型(Data Model)是數(shù)據(jù)特征的抽象,是數(shù)據(jù)庫管理
發(fā)表于 08-03 15:05
?8096次閱讀
概率XML數(shù)據(jù)模型的綜述
首先介紹了概率XML數(shù)據(jù)管理技術(shù)的概念,特點和挑戰(zhàn);其次綜述了概率XML數(shù)據(jù)和概率XML數(shù)據(jù)模型,各種模型的核心思想都來自于可能世界模型,通
發(fā)表于 12-26 11:08
?20次下載
共享系統(tǒng)數(shù)據(jù)模型
傳統(tǒng)共享系統(tǒng)數(shù)據(jù)模型的建模方法在語義性質(zhì)分析和語義行為描述方面存在不足,針對以上問題提出了一種基于Fibrations理論的共享系統(tǒng)數(shù)據(jù)模型。主要工作體現(xiàn)在兩個方面:首先,應(yīng)用真值函子、保持真值
發(fā)表于 11-17 14:46
?8次下載
Cassandra數(shù)據(jù)模型設(shè)計指南
本文通過一個簡單的實例詳細(xì)介紹了Cassandra數(shù)據(jù)建模的五個步驟。我們最近在Instaclustr發(fā)表了一篇有關(guān)在Cassandra中經(jīng)常出現(xiàn)的數(shù)據(jù)建模錯誤的文章。這篇文章非常受歡迎,并促使我思考如何設(shè)計出高質(zhì)量的Cassa
發(fā)表于 11-23 10:47
?2034次閱讀
Google Dremel數(shù)據(jù)模型講解
首先簡單介紹一下 Dremel 是什么,能解決什么問題。第二部分著重講 Dremel 的數(shù)據(jù)模型,即數(shù)據(jù)結(jié)構(gòu)。第三部分將談一下在此數(shù)據(jù)結(jié)構(gòu)上設(shè)計的算法。Dremel 的數(shù)據(jù)模型起源于分
發(fā)表于 11-28 17:05
?4324次閱讀
數(shù)據(jù)模型的概念和作用
數(shù)據(jù)模型(DataModel)是現(xiàn)實世界數(shù)據(jù)特征的抽象,或者說是現(xiàn)實世界的數(shù)據(jù)模擬。數(shù)據(jù)庫中,用數(shù)據(jù)模型來抽象地表示現(xiàn)實世界的
數(shù)據(jù)模型的三要素
本視頻主要詳細(xì)介紹了數(shù)據(jù)模型的三要素,分別是數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)操作和數(shù)據(jù)約束。
數(shù)據(jù)模型有哪些種類
數(shù)據(jù)庫的類型是根據(jù)數(shù)據(jù)模型來劃分的,而任何一個DBMS也是根據(jù)數(shù)據(jù)模型有針對性地設(shè)計出來的,這就意味著必須把數(shù)據(jù)庫組織成符合DBMS規(guī)定的數(shù)據(jù)模型
智能電網(wǎng)的數(shù)據(jù)模型標(biāo)準(zhǔn)
數(shù)據(jù)模型標(biāo)準(zhǔn)可以在智能電網(wǎng)架構(gòu)模型的信息層表示。將數(shù)據(jù)模型從通信協(xié)議和技術(shù)中解耦的概念,被越來越多地應(yīng)用于電力系統(tǒng)相關(guān)的標(biāo)準(zhǔn)化工作中。通過引入的數(shù)據(jù)模型和通信服務(wù)之間的適配層[如IEC
發(fā)表于 06-10 14:46
?1400次閱讀
詳談Python的數(shù)據(jù)模型和對象模型
Python官方文檔說法是“Python數(shù)據(jù)模型”,大多數(shù)Python書籍作者說法是“Python對象模型”,它們是一個意思,表示“計算機(jī)編程語言中對象的屬性”。這句話有點抽象,只要知道對象是Python對數(shù)據(jù)的抽象,在Pyth
Modbus協(xié)議的數(shù)據(jù)模型和地址模型
在使用Modbus協(xié)議的時候,經(jīng)常會遇到諸如40001、30001,10001之類的地址,這些數(shù)字代表什么含義呢?這其實是Modbus協(xié)議的數(shù)據(jù)模型和地址模型。
發(fā)表于 04-07 09:28
?3485次閱讀
Matter的數(shù)據(jù)模型和開發(fā)
在第一篇內(nèi)容中,我們介紹了智能家居互聯(lián)標(biāo)準(zhǔn) Matter會帶來什么好處。本文,我們來了解一下Matter的數(shù)據(jù)模型和開發(fā)。
評論