ATMEGA系列ATMEL芯片-亿配芯城-CSON使用实例:定义数据模型
你的位置:ATMEGA系列ATMEL芯片-亿配芯城 > 芯片资讯 > CSON使用实例:定义数据模型
CSON使用实例:定义数据模型
发布日期:2024-01-01 07:58     点击次数:67
CSON使用实例声明结构体:
/** 项目结构体 */
struct project
{
    int id;
    char *name;
};

/** 仓库结构体 */
struct hub
{
    int id;
    char *user;
    struct project *cson;
};
定义数据模型:

对每一个需要使用cson的结构体,都需要定义相对应的数据模型

/** 项目结构体数据模型 */
CsonModel projectModel[] =
{
    CSON_MODEL_OBJ(struct project),
    CSON_MODEL_INT(struct project, id),
    CSON_MODEL_STRING(struct project, name),
};

/** 仓库结构体数据模型 */
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解析:

只需要定义好数据模型,就可以使用CSON读json进行序列化和反序列化

void csonDemo(void)
{
    char *jsonDemo = "{"id": 1,
EEPROM带电可擦可编程存储器芯片大全 "user": "Letter",
电子元器件PDF资料大全 "cson": {"id": 2,
ATMEGA系列ATMEL芯片COM "name": "cson"}}";

    /** 解析json */
    struct hub *pHub = csonDecode(jsonDemo,
芯片交易网IC交易网 hubModel,CMOS图像传感器集成电路芯片 sizeof(hubModel)/sizeof(CsonModel));
    printf("hub: id: %d, user: %s, project id: %d, project name: %srn",ATMEGA系列-ATMEL芯片
        pHub- >id, pHub- >user, pHub- >cson- >id, pHub- >cson- >name);

    /** 序列化对象 */
    char *formatJson = csonEncodeFormatted(pHub, hubModel, sizeof(hubModel)/sizeof(CsonModel));
    printf("format json: %srn", 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"
        }
}

可以看到,无论是解析json,还是序列化结构体到json,在使用CSON的情况下,都只需要一行代码就可以解决,同样的操作,在使用原生cJSON的情况下,你可能需要多次判断,解析元素。