cJson详述(一)

cJson的介绍

JSON全称(JavaScript Object Notation),JavaScript对象表示法。一看跟JavaScript有关系,其实它是一种独立于语言的文本格式,一种轻量级的数据交换格式,可以广泛的使用于不同编程语言下,而不单单是JavaScript。JSON具有易于人看懂又易于机器编程识别的特点。
在c语言环境中,围绕JSON字符串的生成,解析等,就有人写出了一套c语言库,即cJSON。JSON解析器,解析库,解析框架
关于JSON的详细介绍:https://www.json.org/json-en.html

Json的格式介绍

1.先来看看JSON的一个综合性例子:

{
	"布尔值":true,
	"null值":null,
	"数字":666,
	"字符串":"hello JSON",
	"数组":[
		{"Object":"对象1", "attr":"red"},
		{"Object":"对象2", "attr":"green"},
		{"Object":"对象3", "attr":"blue"}
	],
	"对象":{
        "百度":"www.baidu.com",
        "QQ":"www.qq.com"
    }
}

2.JSON的格式:
从上面的例子,我们可以看出首先整个JSON数据用一个大括号“{ }”括起来,表明这是一个JSON对象;对象里的数据是由一对对键值( key/value)对组成;key 必须是字符串,value 可以是合法的 JSON 数据类型(字符串, 数字, 对象, 数组, 布尔值或 null);key 和 value 中使用冒号(:)分割,每个 key/value 对使用逗号(,)分割。
3.JSON的值:
1) 布尔值(bool)
JSON 布尔值可以是 true 或者 false;
2)null值(null)
JSON 可以设置 null 值;
3)数字(number)
JSON 数字可以是整型或者浮点型
4)字符串(string)
顾名思义
5)数组(array)
JSON 数组在中括号 [] 中书写,数组的元素可以是多个值value,类型可以是字符串, 数字, 对象, 数组, 布尔值或 null
6)对象(object)
JSON 对象在大括号 {} 中书写,对象中包括多个键值对

cJson的接口介绍

解析Json字符串常用函数

CJSON_PUBLIC(cJSON *) cJSON_Parse(const char *value);
CJSON_PUBLIC(char *) cJSON_Print(const cJSON *item);
CJSON_PUBLIC(char *) cJSON_PrintUnformatted(const cJSON *item);
CJSON_PUBLIC(int) cJSON_GetArraySize(const cJSON *array);
CJSON_PUBLIC(cJSON *) cJSON_GetArrayItem(const cJSON *array, int index);
CJSON_PUBLIC(cJSON *) cJSON_GetObjectItem(const cJSON * const object, const char * const string);
CJSON_PUBLIC(cJSON *) cJSON_GetObjectItemCaseSensitive(const cJSON * const object, const char * const string);
CJSON_PUBLIC(char *) cJSON_GetStringValue(cJSON *item);

创建Json字符串常用函数

/* These calls create a cJSON item of the appropriate type. */
CJSON_PUBLIC(cJSON *) cJSON_CreateNull(void);
CJSON_PUBLIC(cJSON *) cJSON_CreateTrue(void);
CJSON_PUBLIC(cJSON *) cJSON_CreateFalse(void);
CJSON_PUBLIC(cJSON *) cJSON_CreateBool(cJSON_bool boolean);
CJSON_PUBLIC(cJSON *) cJSON_CreateNumber(double num);
CJSON_PUBLIC(cJSON *) cJSON_CreateString(const char *string);
/* raw json */
CJSON_PUBLIC(cJSON *) cJSON_CreateRaw(const char *raw);
CJSON_PUBLIC(cJSON *) cJSON_CreateArray(void);
CJSON_PUBLIC(cJSON *) cJSON_CreateObject(void);
/* Append item to the specified array/object. */
CJSON_PUBLIC(void) cJSON_AddItemToArray(cJSON *array, cJSON *item);
CJSON_PUBLIC(void) cJSON_AddItemToObject(cJSON *object, const char *string, cJSON *item);

JSON创建和解析的综合例子:

#include <stdio.h>
#include "cJSON.h"
//解析JSON字符串
void prase_json(char *json_str)
{
	cJSON* root = NULL;
	cJSON* unit = NULL;
	cJSON* array = NULL;
	cJSON* object = NULL;
	int array_size = 0;
	int i;

	root = cJSON_Parse(json_str);
	if (root == NULL)
	{
		printf("Error before: [%s]\n", cJSON_GetErrorPtr());
	}
	else
	{
		printf("{\n");
		unit = cJSON_GetObjectItem(root, "布尔值");
		printf("\t\"%s\":%s,\n", unit->string, unit->valueint ? "true" : "false");

		unit = cJSON_GetObjectItem(root, "null值");
		printf("\t\"%s\":%s,\n", unit->string, unit->valuestring);

		unit = cJSON_GetObjectItem(root, "数字");
		printf("\t\"%s\":%d,\n", unit->string, unit->valueint);

		unit = cJSON_GetObjectItem(root, "字符串");
		printf("\t\"%s\":\"%s\",\n", unit->string, unit->valuestring);

		array = cJSON_GetObjectItem(root, "数组");
		printf("\t\"%s\":[\n", array->string);
		array_size = cJSON_GetArraySize(array);
		//printf("array_size = %d\n", array_size);
		for (i = 0; i < array_size; i++)
		{
			printf("\t\t{");
			object = cJSON_GetArrayItem(array, i);
			unit = cJSON_GetObjectItem(object, "Object");
			printf("\"%s\":\"%s\",", unit->string, unit->valuestring);
			unit = cJSON_GetObjectItem(object, "attr");
			printf("\"%s\":\"%s\",", unit->string, unit->valuestring);
			if (i == array_size - 1)
			{
				printf("}\n");
			}
			else
			{
				printf("},\n");
			}
		}
		printf("\t]\n");

		object = cJSON_GetObjectItem(root, "对象");
		printf("\t\"%s\":{\n", object->string);
		unit = cJSON_GetObjectItem(object, "百度");
		printf("\t\t\"%s\":\"%s\",\n", unit->string, unit->valuestring);
		unit = cJSON_GetObjectItem(object, "QQ");
		printf("\t\t\"%s\":\"%s\"\n", unit->string, unit->valuestring);
		printf("\t}\n");
		printf("}");
	}
}
//创建JSON对象,并输出JSON字符串
char* creat_json(void)
{
	cJSON* root = NULL;
	cJSON* object = NULL;
	cJSON* array = NULL;
	cJSON* item = NULL;
	char* out;


	root = cJSON_CreateObject();
	cJSON_AddItemToObject(root, "布尔值", cJSON_CreateBool(0));
	cJSON_AddItemToObject(root, "null值", cJSON_CreateNull());
	cJSON_AddItemToObject(root, "数字", cJSON_CreateNumber(666));
	cJSON_AddItemToObject(root, "字符串", cJSON_CreateString("hello JSON"));

	array = cJSON_CreateArray();

	object = cJSON_CreateObject();
	cJSON_AddItemToObject(object, "Object", cJSON_CreateString("对象1"));
	cJSON_AddItemToObject(object, "attr", cJSON_CreateString("red"));
	cJSON_AddItemToArray(array, object);


	object = cJSON_CreateObject();
	cJSON_AddItemToObject(object, "Object", cJSON_CreateString("对象2"));
	cJSON_AddItemToObject(object, "attr", cJSON_CreateString("green"));
	cJSON_AddItemToArray(array, object);

	object = cJSON_CreateObject();
	cJSON_AddItemToObject(object, "Object", cJSON_CreateString("对象"));
	cJSON_AddItemToObject(object, "attr", cJSON_CreateString("blue"));
	cJSON_AddItemToArray(array, object);

	cJSON_AddItemToObject(root, "数组", array);

	object = cJSON_CreateObject();
	cJSON_AddItemToObject(object, "百度", cJSON_CreateString("www.baidu.com"));
	cJSON_AddItemToObject(object, "QQ", cJSON_CreateString("www.qq.com"));
	cJSON_AddItemToObject(root, "对象", object);

	out = cJSON_Print(root);
	//printf("%s", cJSON_Print(root));
	return out;
}

int main(void)
{
	char *json_str;
	json_str = creat_json();
	prase_json(json_str);
	free(json_str);
	return 0;
}

运行结果
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值