本文为转载

原文地址: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. Window10彻底卸载应用商店

    Window10如何彻底卸载应用商店?Window10应用商店就是一个应用下载平台,我们可以在应用商店中下载各种应用,但是很多用户并不喜欢在Window10应用商店中下载应用,觉得应用商店浪费内存,因 ...

  2. [CSP-S模拟测试]:sum(数学+莫队)

    题目传送门(内部题63) 输入格式 第一行有一个整数$id$,表示测试点编号.第一行有一个整数$q$,表示询问组数.然后有$q$行,每行有两个整数$n_i,m_i$. 输出格式 一共有$q$行,每行一 ...

  3. NSProxy实现AOP方便为ios应用实现异常处理策略

    前段时间关注过objc实现的AOP. 在GitHub找到了其中的两个库:AOP-in-Objective-C 和 AOP-for-Objective-C 第一个是基于NSProxy来实现的:第二个是基 ...

  4. I/O等待事件-db file scattered read

    摘自:http://blog.csdn.net/zq9017197/article/details/7925338

  5. ImportError: libsybdb.so.5: cannot open shared object file: No such file or directory pymssql linux 问题解决 搭建驱动

    [root@hadoop1 nlp]# python sqlserver_t.py Traceback (most recent call last):  File "sqlserver_t ...

  6. 使用 Select2 下拉框实现复选

    使用 Select2 下拉框实现复选 <!DOCTYPE html> <html> <head> <meta http-equiv="Content ...

  7. AppiumLibrary库倒入后显示红色,日志报错:ImportError: cannot import name 'InvalidArgumentException'

    AppiumLibrary安装后,robotframe worke 倒入后一直显示红色,查看日志报错:ImportError: cannot import name 'InvalidArgumentE ...

  8. 用C#调用C++DLL提示找不到DLL解决方法【转】

    用C#调用自己写的C++ DLL(x64),总是提示找不到DLL,调试可以,发布release老是提示找不到DLL(dll文件确定存在) 原因:Visual C++的DLL分发方式没选:调试默认选择: ...

  9. C++ STL:优先队列的使用详解

    堆是一个很重要的数据结构,那么我们如何更加简洁的去写大根/小根堆呢? 对于很多语言来说,只能一步一步手打,但是对于C++来说,写大根小根堆就简便得多,因为C++中有一个容器叫做priority_que ...

  10. Pollard Rho算法浅谈

    Pollard Rho介绍 Pollard Rho算法是Pollard[1]在1975年[2]发明的一种将大整数因数分解的算法 其中Pollard来源于发明者Pollard的姓,Rho则来自内部伪随机 ...