csjon编程

1.1 背景
项目中,用mqtt协议进行传输数据,需要对数据进行cjson格式化之后,再发送,总结了以下一些常用的例子,cjson库可以从网上下载。

1.2 demo

/*************************************************************************
	> File Name: example.c
	> Author: ma6174
	> Mail: ma6174@163.com 
	> Created Time: Fri 26 Jul 2019 02:01:45 PM CST
 ************************************************************************/

#include <stdio.h>
#include <cJSON.h>
#include <stdlib.h>

#define DEBUG_INFO(fmt, args...) printf("\033[33m[%s:%s:%d]\033[0m "#fmt"\r\n", __FILE__,__FUNCTION__, __LINE__, ##args)

//创建数组
void create_json_array(void)
{
	//创建一个对象root
	cJSON *root = cJSON_CreateObject();
	//root对象添加成员Data_ID,类型number
	cJSON_AddNumberToObject(root ,"Data_ID",1000);
	cJSON * Data_Item;
	//root对象添加成员Data,类型是一个对象
	cJSON_AddItemToObject(root ,"Data" , Data_Item = cJSON_CreateObject());

    cJSON * Ip_Item;
	//往Data_Item对象添加数组Ip_Item
    cJSON_AddItemToObject(Data_Item ,"IpList",Ip_Item = cJSON_CreateArray());
    
	//往数组Ip_Item,依次添加成员
    cJSON *dira;
	cJSON_AddItemToObject(Ip_Item , "dira", dira = cJSON_CreateObject());
	cJSON_AddStringToObject(dira ,"Key", "123457");
	cJSON_AddStringToObject(dira ,"Ipaddr","192.168.1.1");
		
    cJSON_AddItemToObject(Ip_Item , "dira", dira = cJSON_CreateObject());
    cJSON_AddStringToObject(dira ,"Key", "123456");
    cJSON_AddStringToObject(dira ,"Ipaddr","192.168.1.2");
	
	cJSON_AddItemToObject(Ip_Item , "dira", dira = cJSON_CreateObject());
    cJSON_AddStringToObject(dira ,"Key", "123456");
    cJSON_AddStringToObject(dira ,"Ipaddr","192.168.1.3");
	
	cJSON_AddItemToObject(Ip_Item , "dira", dira = cJSON_CreateObject());
    cJSON_AddStringToObject(dira ,"Key", "123458");
    cJSON_AddStringToObject(dira ,"Ipaddr","192.168.1.4");

    char *JsonOut=cJSON_Print(root);
	DEBUG_INFO("%s",JsonOut);
		
	//释放内存	
	cJSON_Delete(root);
    free(JsonOut);
}

//字符串格式化成json格式
void string_to_cjson(void)
{
	char *str = "{\"Data_Id\":100,\"Ip_List\":[{\"Ip\":\"172.168.1.1\",\"host\":\"c1\"},{\"Ip\":\"172.168.1.2\",\"host\":\"c3\"},{\"Ip\":\"172.168.1.3\",\"host\":\"c3\"}]}";
	
	cJSON *root = cJSON_Parse(str);
    if(!root)
    {
        return;
    }
	
	//根据key,"Ip_List",获取root对象中的Ip_List对象
	cJSON *Ip_List = cJSON_GetObjectItem(root,"Ip_List"); 
	if (Ip_List)
	{
		//获取数组大小
		int Num=cJSON_GetArraySize(Ip_List);
		int i = 0;
		for(i; i < Num; i++)
		{
			//根据索引依次获取数组成员
			cJSON* Item = cJSON_GetArrayItem(Ip_List, i);
			//取出数组元素
			cJSON *Ip= cJSON_GetObjectItem(Item,"Ip");
			if(Ip && Ip->type==cJSON_String)
			{
				DEBUG_INFO("%s",Ip->valuestring);
			}
			
			cJSON *host= cJSON_GetObjectItem(Item,"host");
			if(host && host->type==cJSON_String)
			{
				DEBUG_INFO("%s",host->valuestring);
			}
		}
	}
	
	free(root);
}

int main(void)
{
	create_json_array();
	string_to_cjson();
	return 0;
}

测试效果:

转载于:https://my.oschina.net/u/4149215/blog/3079579

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值