C言語:cJSONライブラリを使用してJSONを構築する

C言語:cJSONライブラリの使用法の詳細説明
C言語:cJSONライブラリを使用してJSONを構築する
C言語:cJSONライブラリを使用してJSON文字列を解析する


1.単純なJSON形式を作成します

1.数字

cJSONライブラリ関数:

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

2.ストリング

cJSONライブラリ関数:

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

3.論理値

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

具体的なコードは次のとおりです。

#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;
}

結果は次のとおりです。

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

注:floatデータを定義するときは、doublefloat定義を使用してください。そうしないと、小数点の後に長い数字の文字列が出力され、失敗の原因になります。

定義 結果
浮く 183.52000427246094
ダブル 183.52

次に、ネストされた配列のJSON形式を作成します

1.数値配列

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);

具体的なコードは次のとおりです。

#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;
}

結果は次のとおりです。

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

注:実行結果から、浮動小数点(float)関数を使用すると、小数点の後に長い数値の文字列が出力され、失敗につながることがわかります。具体的な理由は不明です。技術専門家が理由を知っている場合は、コメント欄にメッセージを残してください。ありがとうございます。

2.文字配列

cJSONライブラリ関数:

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

この機能の使い方はいつも間違っていて、具体的な理由は不明です。理由を知っている技術専門家がいれば、コメント欄にメッセージを残してください、ありがとうございます!
具体的な代替メソッドコードは次のとおりです。

#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;
}

結果は次のとおりです。

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

3.オブジェクトタイプ配列

cJSONライブラリ関数:

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

具体的なコードは次のとおりです。

#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;
}

結果は次のとおりです。

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

3つ目は、ネストされたオブジェクトのJSON形式を作成する

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);	//在对象中添加项目

具体的なコードは次のとおりです。

#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;
}

演算結果:

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

おすすめ

転載: blog.csdn.net/MQ0522/article/details/111405345