一、什么是JSON
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,具有可读性高,易于数据传输和解析的特点,因此被广泛应用于数据的传输和存储中。
JSON的基本数据类型包括数字、字符串、布尔值、数组、对象和null。例如,下面是一个包含三个学生信息的JSON数据:
{
"students": [
{
"name": "Tom",
"age": 18,
"gender": "male"
},
{
"name": "Lucy",
"age": 19,
"gender": "female"
},
{
"name": "Jack",
"age": 20,
"gender": "male"
}
]
}
二、CJSON简介
CJSON是一个轻量级的JSON解析库,其特点是占用内存小、解析速度快、易于使用。CJSON只有两个API,一个用于解析JSON数据,一个用于生成JSON数据。
CJSON的使用非常简单,只需要包含cJSON.h头文件即可。下面是一个简单的示例:
#include
#include "cJSON.h"
int main()
{
char *json_str = "{ \"name\": \"Tom\", \"age\": 18, \"gender\": \"male\" }";
cJSON *root = cJSON_Parse(json_str);
if (root != NULL) {
cJSON *name = cJSON_GetObjectItem(root, "name");
if (name != NULL) {
printf("name: %s\n", name->valuestring);
}
cJSON_Delete(root);
}
return 0;
}
三、CJSON解析JSON数据的技巧
1. 解析基本数据类型
解析JSON数据的基本数据类型包括数字、字符串、布尔值和null。下面是一个示例:
#include
#include "cJSON.h"
int main()
{
char *json_str = "{ \"int\": 1, \"float\": 2.3, \"string\": \"hello\", \"bool_true\": true, \"bool_false\": false, \"null\": null }";
cJSON *root = cJSON_Parse(json_str);
if (root != NULL) {
cJSON *int_val = cJSON_GetObjectItem(root, "int");
if (int_val != NULL && cJSON_IsNumber(int_val)) {
printf("int_val: %d\n", int_val->valueint);
}
cJSON *float_val = cJSON_GetObjectItem(root, "float");
if (float_val != NULL && cJSON_IsNumber(float_val)) {
printf("float_val: %f\n", float_val->valuedouble);
}
cJSON *string_val = cJSON_GetObjectItem(root, "string");
if (string_val != NULL && cJSON_IsString(string_val)) {
printf("string_val: %s\n", string_val->valuestring);
}
cJSON *bool_true_val = cJSON_GetObjectItem(root, "bool_true");
if (bool_true_val != NULL && cJSON_IsTrue(bool_true_val)) {
printf("bool_true_val: true\n");
}
cJSON *bool_false_val = cJSON_GetObjectItem(root, "bool_false");
if (bool_false_val != NULL && cJSON_IsFalse(bool_false_val)) {
printf("bool_false_val: false\n");
}
cJSON *null_val = cJSON_GetObjectItem(root, "null");
if (null_val != NULL && cJSON_IsNull(null_val)) {
printf("null_val: null\n");
}
cJSON_Delete(root);
}
return 0;
}
2. 解析数组
解析JSON数据中的数组,可以使用cJSON_GetArrayItem和cJSON_GetArraySize两个API。下面是一个示例:
#include
#include "cJSON.h"
int main()
{
char *json_str = "{ \"array\": [1, 2, 3] }";
cJSON *root = cJSON_Parse(json_str);
if (root != NULL) {
cJSON *array_val = cJSON_GetObjectItem(root, "array");
if (array_val != NULL && cJSON_IsArray(array_val)) {
int array_size = cJSON_GetArraySize(array_val);
printf("array_size: %d\n", array_size);
for (int i = 0; i valueint);
}
}
}
cJSON_Delete(root);
}
return 0;
}
3. 解析对象
解析JSON数据中的对象,可以使用cJSON_GetObjectItem和cJSON_GetArraySize两个API。下面是一个示例:
#include
#include "cJSON.h"
int main()
{
char *json_str = "{ \"obj\": { \"name\": \"Tom\", \"age\": 18, \"gender\": \"male\" } }";
cJSON *root = cJSON_Parse(json_str);
if (root != NULL) {
cJSON *obj_val = cJSON_GetObjectItem(root, "obj");
if (obj_val != NULL && cJSON_IsObject(obj_val)) {
cJSON *name = cJSON_GetObjectItem(obj_val, "name");
if (name != NULL && cJSON_IsString(name)) {
printf("name: %s\n", name->valuestring);
}
cJSON *age = cJSON_GetObjectItem(obj_val, "age");
if (age != NULL && cJSON_IsNumber(age)) {
printf("age: %d\n", age->valueint);
}
cJSON *gender = cJSON_GetObjectItem(obj_val, "gender");
if (gender != NULL && cJSON_IsString(gender)) {
printf("gender: %s\n", gender->valuestring);
}
}
cJSON_Delete(root);
}
return 0;
}
四、总结
CJSON是一个非常轻量级的JSON解析库,使用简单,占用内存小,解析速度快。在实际开发中,我们经常需要解析JSON格式的数据,这时候CJSON就是一个不错的选择。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/198485.html
微信扫一扫
支付宝扫一扫