C/C++ cJSON 使用实例
本文为转载
原文地址:http://blog.sina.com.cn/s/blog_4c0cb1c00102xg7j.html
使用说明:将cJSON.c、cJSON.h两个文件,拷贝到工程项目文件中编译使用即可。
下载地址:https://sourceforge.net/projects/cjson/
主要函数:
【1】常用创建
【创建JSON对象】cJSON *cJSON_CreateObject(void);
【创建JSON数组】cJSON *cJSON_CreateArray(void);
【2】常用添加
【向对象中添加对象】voidcJSON_AddItemToObject(cJSON *object,const char *string,cJSON *item);
【向数组中添加对象】void cJSON_AddItemToArray(cJSON *array, cJSON *item);
【向对象中添加数值】cJSON_AddNumberToObject(object,name,n)
【向对象中添加字符串】 cJSON_AddStringToObject(object,name,s)
示例:
#include
#include "cJSON.h"
char *makeJson()
{
cJSON *pJsonRoot = NULL;
cJSON *pIntArray = NULL;
cJSON *pCommArray = NULL;
cJSON *pSubJson = NULL;
char *p = NULL;
int intarr[5] = {0, 1, 2, 3, 4}; //整数数组
pJsonRoot = cJSON_CreateObject(); //创建JSON对象
if(NULL == pJsonRoot)
{
//error happend here
return NULL;
}
cJSON_AddStringToObject(pJsonRoot, "hello", "hello world"); //添加一个值为字符串的键值对"hello":"hello world"
cJSON_AddNumberToObject(pJsonRoot, "number", 10010); //添加一个值为数值的键值对"number": 10010
cJSON_AddBoolToObject(pJsonRoot, "bool", 1); //添加一个值为布尔的键值对"bool": 1
pSubJson = cJSON_CreateObject(); //创建另一个json对象作为子对象
if(NULL == pSubJson)
{
// create object faild, exit
cJSON_Delete(pJsonRoot); //删除pJsonRoot 及其子对象
return NULL;
}
cJSON_AddStringToObject(pSubJson, "subjsonobj", "a sub json string"); //添加一个值为布尔的键值对
cJSON_AddItemToObject(pJsonRoot, "subobj", pSubJson); //将对象pSubJson添加到pJsonRoot中,成为键值对 "subobj":pSubJson
//数值数组
pIntArray = cJSON_CreateIntArray(intarr, 5); //为intarr创建一个数值数组对象,
cJSON_AddItemToObject(pJsonRoot, "IntArr", pIntArray); //将对象pIntArray添加到pJsonRoot中,成为键值对 " IntArr ":pIntArray
//通用数组
pCommArray = cJSON_CreateArray();//创建数组对象
//cJSON_AddItemToArray(cJSON *array, cJSON *item);//向数组中添加对象
cJSON_AddNumberToObject(pCommArray, "num", 2); //向数组中添加数值cJSON_AddNumberToObject(object,name,n)
cJSON_AddStringToObject(pCommArray, "str", "hopeview"); //向对象中添加字符串 cJSON_AddStringToObject(object,name,s)
cJSON_AddItemToObject(pJsonRoot, "pCommArray ", pCommArray); //将对象pCommArray添加到pJsonRoot中,成为键值对 " pCommArray ":pCommArray
p = cJSON_Print(pJsonRoot); //json对象转为json字符串用于传输
// else use :
// char * p = cJSON_PrintUnformatted(pJsonRoot);
if(NULL == p)
{
//convert json list to string faild, exit
//because sub json pSubJson han been add to pJsonRoot, so just delete pJsonRoot, if you also delete pSubJson, it will coredump, and error is : double free
cJSON_Delete(pJsonRoot); //删除pJsonRoot 及其子对象
return NULL;
}
//free(p);
cJSON_Delete(pJsonRoot); //释放json对象
printf("myJson is:%s",p);
return p; //返回json字符串,注意外面用完p要记得释放空间。//free(p);
}
C/C++ cJSON 使用实例的更多相关文章
- 最近学习工作流 推荐一个activiti 的教程文档
全文地址:http://www.mossle.com/docs/activiti/ Activiti 5.15 用户手册 Table of Contents 1. 简介 协议 下载 源码 必要的软件 ...
- (转)使用 CJSON 在C语言中进行 JSON 的创建和解析的实例讲解
使用 CJSON 在C语言中进行 JSON 的创建和解析的实例讲解 本文用代码简单介绍cjson的使用方法,1)创建json,从json中获取数据.2)创建json数组和解析json数组 1. 创 ...
- 使用 CJSON 在C语言中进行 JSON 的创建和解析的实例讲解
本文用代码简单介绍cjson的使用方法,1)创建json,从json中获取数据.2)创建json数组和解析json数组 1. 创建json,从json中获取数据 #include <stdio. ...
- cJSON: 一个用c写的一个简单好用的JSON解析器
转自:http://blog.csdn.net/chenzhongjing/article/details/9188347 下载地址: http://sourceforge.net/projects/ ...
- jsoncpp代码实例
最近开始使用 jsoncpp,以前一直在使用cJSON,但是使用cJSON的时候经常会忘记free掉json的内存,结果造成了内存泄露,程序跑着跑着就崩溃了.所以最近把json转移到了jsoncpp上 ...
- cJSON应用举例
//在网上查了不少cJSON,结果只找到c语言字符串转换到JSON的实例,想转回来结果没有实例.自己琢磨了一个下午才敢下手.下面把转来转去的代码贴上. //百度网盘的 CJSON 实例源码 地址 ht ...
- JSON格式解析和libjson使用简介(关于cjson的使用示例)
JSON格式解析和libjson使用简介 在阅读本文之前,请先阅读下<Rss Reader实例开发之系统设计>一文. Rss Reader实例开发中,进行网络数据交换时主要使用到了两种数据 ...
- Redis进阶实践之八Lua的Cjson在Linux下安装、使用和用C#调用Lua脚本
一.引言 学习Redis也有一段时间了,感触还是颇多的,但是自己很清楚,路还很长,还要继续.上一篇文章简要的介绍了如何在Linux环境下安装Lua,并介绍了在Linux环境下如何编写L ...
- JSON构造/解析(by C)---cJSON和json-c
背景 JSON即JavaScript Object Notation,是一种轻量级的数据交换格式. JSON建构于两种结构: "名称/值"对的集合(A collection of ...
随机推荐
- Redis使用场景一,查询出的数据保存到Redis中,下次查询的时候直接从Redis中拿到数据。不用和数据库进行交互。
maven使用: <!--redis jar包--> <dependency> <groupId>redis.clients</groupId> < ...
- php key()函数 语法
php key()函数 语法 作用:返回数组内部指针当前指向元素的键名.大理石构件支架 语法:key(array) 参数: 参数 描述 array 必需.规定要使用的数组. 说明:返回数组内部指针当前 ...
- Cluster基础(一):配置iSCSI服务、编写udev规则、配置并访问NFS共享、部署Multipath多路径环境
一.配置iSCSI服务 目标: 本案例要求先搭建好一台iSCSI服务器,并将整个磁盘共享给客户端: 虚拟机添加新的磁盘 将新添加的磁盘分区并创建两个逻辑卷 逻辑卷名称分别为:/dev/myvg/isc ...
- PHPExcel笔记
PHPExcel可是个好东东,功能强大,下面这是一个phpExcel简易中文帮助手册,列举了各种属性,以及常用的操作方法,是每一个都用实例加以说明,希望对大家有所帮助. 引用PHPExcel incl ...
- JavaScript面向对象初步认识
一.面向对象初步认识 1.什么是对象? 一句话解释: 万物皆对象 对象是有属性的:用{ }来写入! 2.对象的应用(接口) json 接口简单的说就是后台提供给前端提供数据的,让我们进行渲染! 请求接 ...
- Hive学习之路(一)Hive初识
Hive简介 什么是Hive Hive由Facebook实现并开源 是基于Hadoop的一个数据仓库工具 可以将结构化的数据映射为一张数据库表 提供HQL(Hive SQL)查询功能 底层数据是存储在 ...
- 51nod 1205 流水线调度
1205 流水线调度 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 N个作业{1,2,…,n}要在由2台机器M1和M2组成的流水线上完成加工.每个 ...
- CSU 1552 Friends(二分图 + 米勒测试)
题目链接:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1552 Description On an alien planet, every e ...
- php面试专题---22、网站优化 总结
php面试专题---22.网站优化 总结 一.总结 一句话总结: 主要从前端.后端.数据库.资源四个方面开始发散 前端浏览器缓存和数据压缩前端优化(减少HTTP请求次数) 资源流量优化(防盗链处理)C ...
- Linux Weblogic部署web项目(war包)
第一步,启动并访问weblogic,进入登录页面 第二步,进入主页面,开始部署项目 第三步,上载项目war包 选择需要上载的本地war包 第四步,开始项目配置 继续下一步 选择红色标记的配置 第五步, ...