本文为转载

原文地址: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 使用实例的更多相关文章

  1. 最近学习工作流 推荐一个activiti 的教程文档

    全文地址:http://www.mossle.com/docs/activiti/ Activiti 5.15 用户手册 Table of Contents 1. 简介 协议 下载 源码 必要的软件 ...

  2. (转)使用 CJSON 在C语言中进行 JSON 的创建和解析的实例讲解

    使用 CJSON 在C语言中进行 JSON 的创建和解析的实例讲解   本文用代码简单介绍cjson的使用方法,1)创建json,从json中获取数据.2)创建json数组和解析json数组 1. 创 ...

  3. 使用 CJSON 在C语言中进行 JSON 的创建和解析的实例讲解

    本文用代码简单介绍cjson的使用方法,1)创建json,从json中获取数据.2)创建json数组和解析json数组 1. 创建json,从json中获取数据 #include <stdio. ...

  4. cJSON: 一个用c写的一个简单好用的JSON解析器

    转自:http://blog.csdn.net/chenzhongjing/article/details/9188347 下载地址: http://sourceforge.net/projects/ ...

  5. jsoncpp代码实例

    最近开始使用 jsoncpp,以前一直在使用cJSON,但是使用cJSON的时候经常会忘记free掉json的内存,结果造成了内存泄露,程序跑着跑着就崩溃了.所以最近把json转移到了jsoncpp上 ...

  6. cJSON应用举例

    //在网上查了不少cJSON,结果只找到c语言字符串转换到JSON的实例,想转回来结果没有实例.自己琢磨了一个下午才敢下手.下面把转来转去的代码贴上. //百度网盘的 CJSON 实例源码 地址 ht ...

  7. JSON格式解析和libjson使用简介(关于cjson的使用示例)

    JSON格式解析和libjson使用简介 在阅读本文之前,请先阅读下<Rss Reader实例开发之系统设计>一文. Rss Reader实例开发中,进行网络数据交换时主要使用到了两种数据 ...

  8. Redis进阶实践之八Lua的Cjson在Linux下安装、使用和用C#调用Lua脚本

    一.引言         学习Redis也有一段时间了,感触还是颇多的,但是自己很清楚,路还很长,还要继续.上一篇文章简要的介绍了如何在Linux环境下安装Lua,并介绍了在Linux环境下如何编写L ...

  9. JSON构造/解析(by C)---cJSON和json-c

    背景 JSON即JavaScript Object Notation,是一种轻量级的数据交换格式. JSON建构于两种结构: "名称/值"对的集合(A collection of ...

随机推荐

  1. Cluster基础(二):ipvsadm命令用法、部署LVS-NAT集群、部署LVS-DR集群

    一.ipvsadm命令用法 目标: 准备一台Linux服务器,安装ipvsadm软件包,练习使用ipvsadm命令,实现如下功能: 使用命令添加基于TCP一些的集群服务 在集群中添加若干台后端真实服务 ...

  2. python之面向过程,函数式编程,面向对象浅析

    python编程有面向过程.面向函数.面向对象三种,那么他们区别在哪呢?这个问题,让我想起我在学习编程的时候,我的老师给我举的例子.分享给大家. 面向过程就是将编程当成是做一件事,要按步骤完成! 比如 ...

  3. php面试专题---MySQL常用SQL语句优化

    php面试专题---MySQL常用SQL语句优化 一.总结 一句话总结: 原理,万变不离其宗:其实SQL语句优化的过程中,无非就是对mysql的执行计划理解,以及B+树索引的理解,其实只要我们理解执行 ...

  4. algorithm_action

    求矩阵Amk.Bkn的乘积 for(i=1;i<=m;i++) for(j=1;j<=n;j++) cij = 0 for(p=1;p<=k;p++) cij += aip*bpj

  5. Recurrent Neural Network(3):LSTM Basics and 《Inside Out》

    下图是Naive RNN的Recurrent Unit示意图,可以看到,在每个时间点t,Recurrent Unit会输出一个隐藏状态ht,对ht加工提取后将产生t时刻的输出yt.而在下一个时间节点t ...

  6. Git015--标签管理

    Git--标签管理 本文来自于:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/ ...

  7. MySQL数据库忘记密码如何重新设置?

    前 言当我们忘记了MySQL数据库密码后,该如何重新进行设置? 操作步骤步骤1:cmd打开命名窗口 步骤2:关闭正在运行的MySQL服务(命令:net stop mysql)(如果:此时MySQL正在 ...

  8. Spring-Cloud-Alibaba-Nacos 目录

    Spring-Cloud-Alibaba-Nacos 目录 学习资料 Nacos 官网(https://nacos.io/zh-cn/docs/what-is-nacos.html) Nacos 程序 ...

  9. P4158[SCOI2009]粉刷匠

    题目描述 windy有 N 条木板需要被粉刷. 每条木板被分为 M 个格子. 每个格子要被刷成红色或蓝色. windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色. 每个格子最多只能被 ...

  10. 远程连接SuSE系统的配置方法

    今天,在VMware上搭建了SuSE Linux系统,使用xshell远程进行连接,一直连接不上,后来百度了一下,连接成功,这里总结一下配置的办法: (1):关闭防火墙 (2):配置sshd( Pas ...