一、什麼是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/zh-tw/n/198485.html
微信掃一掃
支付寶掃一掃