一種cJSON與結構體互轉(zhuǎn)的方法
關注、星標公眾號,直達精彩內(nèi)容
鏈接:https://blog.csdn.net/qq_34245464/article/details/100168884
前言
思路
實現(xiàn)
typedef struct cson_model
{
CsonType type; /**< 數(shù)據(jù)類型 */
char *key; /**< 元素鍵值 */
short offset; /**< 元素偏移 */
} CsonModel;
struct project
{
int id;
char *name;
}
{.type=CSON_TYPE_CHAR, key="id", offset=0}
*(int *)((int)obj + model[i].offset) = (int)csonDecodeNumber(json, model[i].key);
CSON使用實例
聲明結構體:
/** 項目結構體 */
struct project
{
int id;
char *name;
};
/** 倉庫結構體 */
struct hub
{
int id;
char *user;
struct project *cson;
};
定義數(shù)據(jù)模型:
/** 項目結構體數(shù)據(jù)模型 */
CsonModel projectModel[] =
{
CSON_MODEL_OBJ(struct project),
CSON_MODEL_INT(struct project, id),
CSON_MODEL_STRING(struct project, name),
};
/** 倉庫結構體數(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解析:
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: %s\r\n",
pHub->id, pHub->user, pHub->cson->id, pHub->cson->name);
/** 序列化對象 */
char *formatJson = csonEncodeFormatted(pHub, hubModel, sizeof(hubModel)/sizeof(CsonModel));
printf("format json: %s\r\n", formatJson);
/** 釋放結構體對象 */
csonFree(pHub, hubModel, sizeof(hubModel)/sizeof(CsonModel));
/** 釋放序列化生成的json字符串 */
csonFreeJson(formatJson);
}
運行結果:
hub: id: 1, user: Letter, project id: 2, project name: cson
format json: {
"id": 1,
"user": "Letter",
"cson": {
"id": 2,
"name": "cson"
}
}
CSON地址
?https://github.com/NevermindZZT/cson
?
???????????????? END ???????????????
關注我的微信公眾號,回復“加群”按規(guī)則加入技術交流群。
點擊“閱讀原文”查看更多分享,歡迎點分享、收藏、點贊、在看。
評論
圖片
表情
