温度上报项目中cjson的使用


前言

一、cJSON简介

cJSON是一个超轻巧,携带方便,单文件,简单的可以作为ANSI-C标准的JSON解析器。使用时,只需要包含cJSON.h和cJSON.c两个文件即可。


二、格式

1.JSON结构体

熟悉使用cJSON库函数可从cJSON结构体入手,cJSON结构体如下所示:

typedef struct cJSON {  
 struct cJSON *next,*prev;   
 struct cJSON *child;   
 int type;   
 char *valuestring;   
 int valueint;  
 double valuedouble;   
 char *string;   
} cJSON;  

2.使用说明

cJSON作为Json格式的解析库,其主要功能就是构建和解析cJson格式,主要有两个用途,一个是一端将要发送的数据已cjson形式封装,然后发送。另一端收到此数据后,还是按cjson形式解析,就得到想要的数据了。


三、使用步骤

1.书写格式

json的书写格式为 : {“名称”:“值”}
例子: {“sn”:rpi#001,“temperature”: 30765,“time”: 1}

2.创建cJSON


int pack_json(char *buf,double temp,time_t tm,char *devid)
{
    if(!temp||!tm||!buf) 
    {
        printf("wrong parameter!\n");
        return -1;
    }
    cJSON *root = cJSON_CreateObject(); //创建json对象
    if(!root)
    {
        printf("wrong:%s\n",strerror(errno));
        return -3;
    }
    cJSON_AddStringToObject(root,"id",devid); //加入键值,加字符串
    cJSON_AddNumberToObject(root,"temperature",temp); 加入键值,加数字
    cJSON_AddNumberToObject(root,"time",tm);


    char *s = cJSON_PrintUnformatted(root); //转化为普通字符串
    strcpy(buf,s);
    cJSON_Delete(root);

}

        
       

3.解析cJSON字符串

  1. 先将普通的json串处理成json对象
    cJSON *root;
    root = cJSON_Parse(js_string);
    
  2. 获取关键字(从父层开始拿),我这里只写出无父层的情况
    字符串:buf={“id”:“weizhiyan”,“temperature”:“12.3”,“time”:1}
int Parse_json(char *buf, char *id, double *tem,int *time,int size_id)
{
 cJSON   *root = NULL;
 cJSON   *temp = NULL;
 char    *ptr  = NULL;
 int     len = 0;

 if(!buf||!id||!tem||!time)
 {
     printf("buf is NULL!\n");
     return -1;
 }


 root = cJSON_Parse(buf); //转化为json对象

 if(!root)
 {
     printf("root is NULL!\n");
     return -2;
 }

 temp = cJSON_GetObjectItem(root, "id"); //获取键值的内容
 ptr = cJSON_Print(temp);
 strcpy(id, ptr);
 free(ptr);

 temp = cJSON_GetObjectItem(root, "temperature");
 ptr = cJSON_Print(temp);
 *tem = atof(ptr);
 free(ptr);


 temp = cJSON_GetObjectItem(root, "time");
 ptr = cJSON_Print(temp);
 *time =atoi(ptr);
 free(ptr);

 cJSON_Delete(root);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值