Lenguaje C: use la biblioteca cJSON para construir JSON

Lenguaje C: explicación detallada del uso de la biblioteca cJSON
Lenguaje C: use la biblioteca cJSON para construir JSON
Lenguaje C: use la biblioteca cJSON para analizar cadenas JSON


1. Construya un formato JSON simple

1. Números

Funciones de la biblioteca cJSON:

//在对象中添加数字
CJSON_PUBLIC(cJSON*) cJSON_AddNumberToObject(cJSON * const object, const char * const name, const double number);

2. Cadena

Funciones de la biblioteca cJSON:

//在对象中添加字符串
CJSON_PUBLIC(cJSON*) cJSON_AddStringToObject(cJSON * const object, const char * const name, const char * const string);

3. Valor lógico

Funciones de la biblioteca cJSON:

//在对象中添加逻辑值
CJSON_PUBLIC(cJSON*) cJSON_AddNullToObject(cJSON * const object, const char * const name);//在对象中添加null
CJSON_PUBLIC(cJSON*) cJSON_AddTrueToObject(cJSON * const object, const char * const name);//在对象中添加true
CJSON_PUBLIC(cJSON*) cJSON_AddFalseToObject(cJSON * const object, const char * const name);//在对象中添加false

El código específico es el siguiente:

#include <stdio.h>
#include "cJSON.h"

int main(void)
{
    
    
	char *name = "MQ";
	int	age = 25;
	double height = 183.52;
	
	cJSON *TCP = cJSON_CreateObject();				//创建一个对象
	
	cJSON_AddStringToObject(TCP,"name",name);		//添加字符串 
	cJSON_AddNumberToObject(TCP,"age",age);	    	//添加整型数字 
	cJSON_AddNumberToObject(TCP,"height",height);	//添加浮点型数字
	cJSON_AddFalseToObject(TCP,"gender");			//添加逻辑值false 
	
 	cJSON_AddStringToObject(TCP,"name","MQ");		//添加字符串 
	cJSON_AddNumberToObject(TCP,"age",25);	    	//添加整型数字 
	cJSON_AddNumberToObject(TCP,"height",183.52);	//添加浮点型数字
	cJSON_AddFalseToObject(TCP,"gender");			//添加逻辑值false
	
	char *json_data = cJSON_Print(TCP);				//JSON数据结构转换为JSON字符串
	printf("%s\n",json_data);						//输出字符串
	cJSON_Delete(TCP);								//清除结构体
	return 0;
}

Los resultados son los siguientes:

{
    
    
        "name": "MQ",
        "age":  25,
        "height":       183.52,
        "gender":       false,
        
        "name": "MQ",
        "age":  25,
        "height":       183.52,
        "gender":       false
}

Nota: Cuando defina datos flotantes, utilice la definición de doble flotante. De lo contrario, se generará una larga cadena de números después del punto decimal, lo que provocará un error.

definición resultado
flotador 183.52000427246094
doble 183,52

En segundo lugar, construya el formato JSON de la matriz anidada

1. Matriz numérica

Funciones de la biblioteca cJSON:

//创建整型数组
CJSON_PUBLIC(cJSON *) cJSON_CreateIntArray(const int *numbers, int count);
//创建浮点型数组---这个使用会出问题,需要浮点型可以使用双浮点型函数。
CJSON_PUBLIC(cJSON *) cJSON_CreateFloatArray(const float *numbers, int count);
//创建双浮点型数组
CJSON_PUBLIC(cJSON *) cJSON_CreateDoubleArray(const double *numbers, int count);

El código específico es el siguiente:

#include <stdio.h>
#include "cJSON.h"

int main(void)
{
    
    
	int		time[4]={
    
    123,456,789,150};
	float	grade1[4]={
    
    66.51,118.52,61.53,128.54};
	double  grade2[4]={
    
    66.51,118.52,61.53,128.54};
	
	cJSON *TCP = cJSON_CreateObject();	//创建一个对象
	
	cJSON *TIM  = cJSON_CreateIntArray(time,4);		//创建一个整型数组
	cJSON_AddItemToObject(TCP,"time",TIM);
	cJSON *GRA1  = cJSON_CreateFloatArray(grade1,4);	//创建一个浮点型数组
	cJSON_AddItemToObject(TCP,"grade",GRA1);
	cJSON *GRA2  = cJSON_CreateDoubleArray(grade2,4);	//创建一个双浮点型数组
	cJSON_AddItemToObject(TCP,"grade",GRA2);
	
	char *json_data = cJSON_Print(TCP);		//JSON数据结构转换为JSON字符串
	printf("%s\n",json_data);	//输出字符串
	cJSON_Delete(TCP);	//清除结构体
	return 0;
}

Los resultados son los siguientes:

{
    
    
        "time": [123, 456, 789, 150],
        "grade": [66.510002136230469, 118.51999664306641, 61.529998779296875, 128.53999328613281],
        "grade": [66.51, 118.52, 61.53, 128.54]
}

Nota: Se puede ver en los resultados de ejecución que el uso de funciones de punto flotante (float) provocará la salida de una larga cadena de números después del punto decimal, lo que provocará un error. Se desconoce el motivo específico, si algún experto técnico conoce el motivo, puede dejar un mensaje en el área de comentarios, ¡gracias!

2. Matriz de caracteres

Funciones de la biblioteca cJSON:

//创建字符型数组---这个使用会出问题,下面有替代方法。
CJSON_PUBLIC(cJSON *) cJSON_CreateStringArray(const char *const *strings, int count);

El uso de esta función siempre es incorrecto, se desconoce el motivo específico, si hay algún técnico experto que conozca el motivo, puede dejar un mensaje en el área de comentarios, ¡gracias!
El código del método alternativo específico es el siguiente:

#include <stdio.h>
#include "cJSON.h"

int main(void)
{
    
    
	char subject[5][6]={
    
    "政治","数学","英语","专业课"};
	
	cJSON *TCP = cJSON_CreateObject();				//创建一个对象
	
	cJSON *SUB1  = cJSON_CreateArray();				//创建一个数组	
	cJSON_AddStringToObject(SUB1,"","政治"); 		//添加字符串到数组
 	cJSON_AddStringToObject(SUB1,"","数学");		//添加字符串到数组
	cJSON_AddStringToObject(SUB1,"","英语");		//添加字符串到数组
	cJSON_AddStringToObject(SUB1,"","专业课");		//添加字符串到数组
	cJSON_AddItemToObject(TCP,"subject",SUB1);		//添加数组到对象
	
	cJSON *SUB2  = cJSON_CreateArray();				//创建一个数组
	cJSON_AddStringToObject(SUB2,"",subject[0]); 	//添加字符串到数组
 	cJSON_AddStringToObject(SUB2,"",subject[1]);	//添加字符串到数组
	cJSON_AddStringToObject(SUB2,"",subject[2]);	//添加字符串到数组
	cJSON_AddStringToObject(SUB2,"",subject[3]);	//添加字符串到数组
	cJSON_AddItemToObject(TCP,"subject",SUB2);		//添加字符串到数组
	
	char *json_data = cJSON_Print(TCP);				//JSON数据结构转换为JSON字符串
	printf("%s\n",json_data);//输出字符串
	cJSON_Delete(TCP);//清除结构体
	return 0;
}

Los resultados son los siguientes:

{
    
    
        "subject": ["政治", "数学", "英语", "专业课"],
        "subject": ["政治", "数学", "英语", "专业课"]
}

3. Matriz de tipos de objeto

Funciones de la biblioteca cJSON:

CJSON_PUBLIC(cJSON *) cJSON_CreateObject(void);	//创建对象
CJSON_PUBLIC(cJSON *) cJSON_CreateArray(void);	//创建数组
CJSON_PUBLIC(cJSON_bool) cJSON_AddItemToArray(cJSON *array, cJSON *item);	//在数组中添加项目

El código específico es el siguiente:

#include <stdio.h>
#include "cJSON.h"

int main(void)
{
    
    
	cJSON *TCP = cJSON_CreateObject();			//创建一个对象
	cJSON *STU  = cJSON_CreateArray();			//创建一个数组
	
	cJSON *Z3  = cJSON_CreateObject();			//创建一个对象
	cJSON_AddStringToObject(Z3,"name","张三");	//添加字符串 
	cJSON_AddNumberToObject(Z3,"age",24);	    //添加整型数字 
	cJSON_AddTrueToObject(Z3,"gender");			//添加逻辑值 
	cJSON_AddItemToArray(STU,Z3);				//添加对象到数组中 
	
	cJSON *L4  = cJSON_CreateObject();			//创建一个对象
	cJSON_AddStringToObject(L4,"name","李四");	//添加字符串 
	cJSON_AddNumberToObject(L4,"age",25);	    //添加整型数字 
	cJSON_AddTrueToObject(L4,"gender");			//添加逻辑值 
	cJSON_AddItemToArray(STU,L4);				//添加对象到数组中
	
	cJSON *W5  = cJSON_CreateObject();			//创建一个对象
	cJSON_AddStringToObject(W5,"name","王五");	//添加字符串 
	cJSON_AddNumberToObject(W5,"age",26);	    //添加整型数字 
	cJSON_AddTrueToObject(W5,"gender");			//添加逻辑值 
	cJSON_AddItemToArray(STU,W5);				//添加对象到数组中
	
	cJSON_AddItemToObject(TCP,"student",STU);   //添加数组到对象中

	
	char *json_data = cJSON_Print(TCP);	//JSON数据结构转换为JSON字符串
	printf("%s\n",json_data);//输出字符串
	cJSON_Delete(TCP);//清除结构体
	return 0;
}

Los resultados son los siguientes:

{
    
    
   "student":[
				{
    
    "name":"张三","age":24,"gender":ture},
				{
    
    "name":"李四","age":25,"gender":ture},
				{
    
    "name":"王五","age":26,"gender":ture},
 	 		  ]	
}

Tres, construya el formato JSON de objetos anidados

Funciones de la biblioteca cJSON:

CJSON_PUBLIC(cJSON *) cJSON_CreateObject(void);	//创建对象
CJSON_PUBLIC(cJSON*) cJSON_AddNumberToObject(cJSON * const object, const char * const name, const double number);//在对象中添加数字
CJSON_PUBLIC(cJSON*) cJSON_AddStringToObject(cJSON * const object, const char * const name, const char * const string);//在对象中添加字符串
CJSON_PUBLIC(cJSON_bool) cJSON_AddItemToObject(cJSON *object, const char *string, cJSON *item);	//在对象中添加项目

El código específico es el siguiente:

#include <stdio.h>
#include "cJSON.h"

int main(void)
{
    
    
	cJSON *TCP = cJSON_CreateObject();				//创建一个对象
	
	cJSON *ADD	= cJSON_CreateObject();				//创建一个对象
	cJSON_AddStringToObject(ADD,"country","China");	//添加字符串 
	cJSON_AddNumberToObject(ADD,"zip-code",123456);	//添加整型数字
 	cJSON_AddItemToObject(TCP,"address",ADD);
 	
	cJSON *Z3  = cJSON_CreateObject();			//创建一个对象
	cJSON_AddStringToObject(Z3,"name","张三");	//添加字符串 
	cJSON_AddNumberToObject(Z3,"age",24);	    //添加整型数字 
	cJSON_AddTrueToObject(Z3,"gender");			//添加逻辑值 
	cJSON_AddItemToObject(TCP,"student1",Z3);				
	 
	cJSON *L4  = cJSON_CreateObject();			//创建一个对象
	cJSON_AddStringToObject(L4,"name","李四");	//添加字符串 
	cJSON_AddNumberToObject(L4,"age",25);	    //添加整型数字 
	cJSON_AddTrueToObject(L4,"gender");			//添加逻辑值 
	cJSON_AddItemToObject(TCP,"student2",L4);
	
	cJSON *W5  = cJSON_CreateObject();			//创建一个对象
	cJSON_AddStringToObject(W5,"name","王五");	//添加字符串 
	cJSON_AddNumberToObject(W5,"age",26);	    //添加整型数字 
	cJSON_AddTrueToObject(W5,"gender");			//添加逻辑值 
	cJSON_AddItemToObject(TCP,"student3",W5);
	
	char *json_data = cJSON_Print(TCP);		//JSON数据结构转换为JSON字符串
	printf("%s\n",json_data);//输出字符串
	cJSON_Delete(TCP);//清除结构体
	return 0;
}

resultado de la operación:

{
    
    
	"address":{
    
    
				"country":      "China",
				"zip-code":     123456
			  },
	"student1":{
    
    
				"name": "张三",
				"age":  24,
				"gender":       true
			   },
	"student2":{
    
    
				"name": "李四",
				"age":  25,
				"gender":       true
			   },
	"student3":{
    
    
				"name": "王五",
				"age":  26,
				"gender":       true
		       }
}

Supongo que te gusta

Origin blog.csdn.net/MQ0522/article/details/111405345
Recomendado
Clasificación