cJSON系列(1) - cJSON 入门与应用

原创 2016年08月31日 14:16:15

cJSON 入门与应用

1. cJSON简介

cJSON aims to be the dumbest possible parser that you can get your job done with. It's a single file of C, and a single header file.

JSON is described best here: http://www.json.org/ It's like XML, but fat-free. You use it to move data around, store things, or just generally represent your program's state.

cJSON 下载地址:https://github.com/DaveGamble/cJSON

2. cJSON常用函数简介

cJSON * cJSON_CreateObject();
创建一个json对象,返回一个cJSON结构体类型的指针。

cJSON *cJSON_CreateArray();
创建一个数组对象,返回一个cJSON结构体类型的指针。

cJSON *cJSON_CreateString(const char *string);
创建一个字符串对象,传入一个char *类型的字符串,返回一个cJSON结构体类型的指针。

void cJSON_AddItemToArray(cJSON *array, cJSON *item);
向数组对象中添加一个元素,传入参数array为cJSON *结构体类型的指针,为数组对象; item为添加入数字对象中的对象指针。

void cJSON_AddItemToObject(cJSON *object,const char *string,cJSON *item);
向json对象中添加一对元素,object为json对象,string为加入一对元素中的name,item为加入一对元素中的value。

cJSON *cJSON_Parse(const char *value);
解析一个json串,传入一个json格式的字符串,返回一个cJSON *类型的结构体指针。

char  *cJSON_Print(cJSON *item);
将一个cJSON结构体代表的json对象转换为一个json格式的字符串。

void   cJSON_Delete(cJSON *c);
释放一个cJSON对象所占用的内存空间。

3. 应用

以此json串为例进行json的生成和解析:
{
	"name": "中国",
	"province": [{
		"name": "黑龙江",
		"cities": {
			"city": ["哈尔滨", "大庆"]
		}
	}, {
		"name": "广东",
		"cities": {
			"city": ["广州", "深圳", "珠海"]
		}
	}, {
		"name": "台湾",
		"cities": {
			"city": ["台北", "高雄"]
		}
	}, {
		"name": "新疆",
		"cities": {
		        "city": ["乌鲁木齐"]
		}
	}]
}

3.1 生成json

#include <stdio.h>

#include "cJSON.h"
#include "cJSON_Utils.h"

#pragma comment(lib,"cjson.lib")

int main(void)
{
	cJSON * json = cJSON_CreateObject();

	cJSON *provinceArray = cJSON_CreateArray();

	cJSON *heilongjiang = cJSON_CreateObject();
	cJSON *hljcities = cJSON_CreateObject();
	cJSON *hljcityArray = cJSON_CreateArray();

	cJSON *guangdong = cJSON_CreateObject();
	cJSON *gdcities = cJSON_CreateObject();
	cJSON *gdcityArray = cJSON_CreateArray();

	cJSON *taiwan = cJSON_CreateObject();
	cJSON *twcities = cJSON_CreateObject();
	cJSON *twcityArray = cJSON_CreateArray();

	cJSON *xinjiang = cJSON_CreateObject();
	cJSON *xjcities = cJSON_CreateObject();
	cJSON *xjcityArray = cJSON_CreateArray();
	
	cJSON_AddStringToObject(json, "name", "中国");

	cJSON_AddStringToObject(heilongjiang, "name", "黑龙江");
	cJSON_AddItemToArray(hljcityArray, cJSON_CreateString("哈尔滨"));
	cJSON_AddItemToArray(hljcityArray, cJSON_CreateString("大庆"));
	cJSON_AddItemToObject(hljcities, "city", hljcityArray);
	cJSON_AddItemToObject(heilongjiang, "cities", hljcities);

	cJSON_AddStringToObject(guangdong, "name", "广东");
	cJSON_AddItemToArray(gdcityArray, cJSON_CreateString("广州"));
	cJSON_AddItemToArray(gdcityArray, cJSON_CreateString("深圳"));
	cJSON_AddItemToArray(gdcityArray, cJSON_CreateString("珠海"));
	cJSON_AddItemToObject(gdcities, "city", gdcityArray);
	cJSON_AddItemToObject(guangdong, "cities", gdcities);

	cJSON_AddStringToObject(taiwan, "name", "台湾");
	cJSON_AddItemToArray(twcityArray, cJSON_CreateString("台北"));
	cJSON_AddItemToArray(twcityArray, cJSON_CreateString("高雄"));
	cJSON_AddItemToObject(twcities, "city", twcityArray);
	cJSON_AddItemToObject(taiwan, "cities", twcities);

	cJSON_AddStringToObject(xinjiang, "name", "新疆");
	cJSON_AddItemToArray(xjcityArray, cJSON_CreateString("乌鲁木齐"));
	cJSON_AddItemToObject(xjcities, "city", xjcityArray);
	cJSON_AddItemToObject(xinjiang, "cities", xjcities);
	
	cJSON_AddItemToArray(provinceArray, heilongjiang);
	cJSON_AddItemToArray(provinceArray, guangdong);
	cJSON_AddItemToArray(provinceArray, taiwan);
	cJSON_AddItemToArray(provinceArray, xinjiang);

	cJSON_AddItemToObject(json, "province", provinceArray);


	printf("%s\n", cJSON_Print(json));


	if ( NULL != json )
	{
		cJSON_Delete(json);
		json = NULL;
	}
	
	return 0;
}

3.2 解析json

#include <stdio.h>

#include "cJSON.h"
#include "cJSON_Utils.h"


#pragma comment(lib,"cjson.lib")

int main(void)
{
 	const char *jsonStr = "{						\
 		\"name\": \"中国\",						\
 		\"province\": [{						\
 			\"name\": \"黑龙江\",					\
 			\"cities\": {						\
 				\"city\": [\"哈尔滨\", \"大庆\"]		\
 			}							\
 		}, {								\
 			\"name\": \"广东\",					\
 			\"cities\": {						\
 				\"city\": [\"广州\", \"深圳\", \"珠海\"]	\
 			}							\
 		}, {								\
 			\"name\": \"台湾\",					\
 			\"cities\": {						\
 				\"city\": [\"台北\", \"高雄\"]			\
 			}							\
 		}, {								\
 			\"name\": \"新疆\",					\
 			\"cities\": {						\
 			\"city\": [\"乌鲁木齐\"]				\
 			}							\
 		}]								\
 	}";

	cJSON *json = cJSON_Parse(jsonStr);

	if ( NULL != json )
	{
		cJSON * temp = cJSON_GetObjectItem(json, "name");

		if ( NULL != temp )
			printf( "name : %s\n", temp->valuestring);

		temp = cJSON_GetObjectItem(json, "province");

		printf( "province : \n");
		if ( NULL != temp )
		{
			int i = 0;
			int icount = cJSON_GetArraySize(temp);
			for (; i < icount; ++i)
			{
				cJSON * province = cJSON_GetArrayItem(temp, i);

				if ( NULL != province)
				{
					cJSON * name = NULL;
					cJSON * cities = NULL;
					
					name = cJSON_GetObjectItem(province, "name");
					cities = cJSON_GetObjectItem(province, "cities");
					if ( NULL != name )
						printf("    name : %s\n", name->valuestring);

					printf("    cities : \n");
					if ( NULL != cities )
					{
						cJSON * city = cJSON_GetObjectItem(cities, "city");
						printf ("        city:");
						if ( NULL != city )
						{
							int j = 0;
							int jcount = cJSON_GetArraySize(city);
							for (; j < jcount; ++j)
							{
								cJSON *cityItem = cJSON_GetArrayItem(city, j);
								if ( NULL != cityItem )
									printf ("%s ", cityItem->valuestring);
							}
						}
						printf ("\n\n");
					}
				}
			}
		}

		cJSON_Delete(json);
		json = NULL;
	}

	return 0;
}




cJSON学习笔记

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript(Standard ECMA-262...
  • xukai871105
  • xukai871105
  • 2013年12月03日 12:54
  • 44723

使用cJSON解析JSON字符串

使用cJSON解析JSON字符串 一、为何选择cJSON; 二、cJSON的核心结构体; 三、解析JSON格式; 1,下载源码; 2,包含cJSON的源码; 3,解析一个键值对; 4,解析一个结构体;...
  • lintax
  • lintax
  • 2016年03月27日 22:00
  • 18285

cJSON用法总结

cJSON是一个很好用的轻量级JSON解析器,也可以用于创建JSON,用C语言写的,最新的代码约700多行。本文介绍cJSON的一些基本用法...
  • Timsley
  • Timsley
  • 2016年04月13日 21:27
  • 4391

cJSON的使用方法

首先,要介绍一下什么是json格式。 一.JSON格式简述 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写,同时也易于机器解...
  • fengxinlinux
  • fengxinlinux
  • 2016年11月10日 21:56
  • 4420

CJSON在C语言中的应用实例讲解

cJSON概念简介: JSON(JavaScriptObject Notation)是一种轻量级的数据交换格式。可以把JSON的结构理解成无序的、可嵌套的key-value键值对集合,这些key...
  • fengdijiang
  • fengdijiang
  • 2017年02月21日 11:16
  • 1400

cJSON

cJSON只有cJSON.h和cJSON.c两个文件、600行代码,
  • rongxiaojun
  • rongxiaojun
  • 2014年08月29日 14:58
  • 1889

cJSON(源码)

  • 2015年02月11日 15:54
  • 24KB
  • 下载

JSON格式介绍和使用cJSON解析

转自:http://hi.baidu.com/xp2xp3/item/c1ff4f1c2ed37adf9c778ab9 在阅读本文之前,请先阅读下《Rss Reader实例开发之系统设计》一文。...
  • azhou_hui
  • azhou_hui
  • 2012年12月19日 22:03
  • 18247

cJSON库介绍

cJSON简介: JSON(JavaScriptObject Notation)是一种轻量级的数据交换格式。它基于JavaScript的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类...
  • Daisy09
  • Daisy09
  • 2011年12月20日 10:37
  • 16372

cJSON各函数实现的功能

参考资料: http://blog.csdn.net/daisy09/article/details/7086746 cJSON简介: JSON(JavaScriptObject N...
  • wangpengqi
  • wangpengqi
  • 2013年07月22日 18:30
  • 9919
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:cJSON系列(1) - cJSON 入门与应用
举报原因:
原因补充:

(最多只允许输入30个字)