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