cjson系列——EXAMPLES
cJson demo
这篇文章列举出大部分常用cjson调用的demo场景,并列举出对应的打印
1. 创建 JSON 对象并打印
此示例展示了如何创建一个简单的 JSON 对象,并将其打印为 JSON 字符串。
#include <stdio.h>
#include <stdlib.h>
#include <cjson/cJSON.h>
int main() {
// 创建 JSON 对象
cJSON *root = cJSON_CreateObject();
// 向对象中添加数据
cJSON_AddStringToObject(root, "name", "Alice");
cJSON_AddNumberToObject(root, "age", 25);
cJSON_AddBoolToObject(root, "isStudent", 1);
// 将 JSON 对象打印成字符串
char *json_string = cJSON_Print(root);
printf("JSON: \n%s\n", json_string);
// 清理内存
free(json_string);
cJSON_Delete(root);
return 0;
}
输出:
{
"name": "Alice",
"age": 25,
"isStudent": true
}
2. 创建 JSON 数组并打印
此示例展示了如何创建一个 JSON 数组,并添加一些元素。
#include <stdio.h>
#include <stdlib.h>
#include <cjson/cJSON.h>
int main() {
// 创建 JSON 数组
cJSON *array = cJSON_CreateArray();
// 向数组中添加数据
cJSON_AddStringToArray(array, "apple");
cJSON_AddStringToArray(array, "banana");
cJSON_AddNumberToArray(array, 42);
// 将 JSON 数组打印成字符串
char *json_string = cJSON_Print(array);
printf("JSON Array: \n%s\n", json_string);
// 清理内存
free(json_string);
cJSON_Delete(array);
return 0;
}
输出:
["apple", "banana", 42]
3. 解析 JSON 字符串并访问数据
此示例展示了如何解析 JSON 字符串,并访问其中的值。
#include <stdio.h>
#include <stdlib.h>
#include <cjson/cJSON.h>
int main() {
// JSON 字符串
const char *json_string = "{\"name\": \"John\", \"age\": 30, \"city\": \"New York\"}";
// 解析 JSON 字符串
cJSON *json = cJSON_Parse(json_string);
if (json == NULL) {
printf("Error parsing JSON.\n");
return -1;
}
// 获取各个字段的值
cJSON *name = cJSON_GetObjectItem(json, "name");
cJSON *age = cJSON_GetObjectItem(json, "age");
cJSON *city = cJSON_GetObjectItem(json, "city");
// 输出数据
if (cJSON_IsString(name)) {
printf("Name: %s\n", name->valuestring);
}
if (cJSON_IsNumber(age)) {
printf("Age: %d\n", age->valueint);
}
if (cJSON_IsString(city)) {
printf("City: %s\n", city->valuestring);
}
// 清理内存
cJSON_Delete(json);
return 0;
}
输出:
Name: John
Age: 30
City: New York
4. 修改 JSON 对象
此示例展示了如何修改 JSON 对象中的数据。
#include <stdio.h>
#include <stdlib.h>
#include <cjson/cJSON.h>
int main() {
// JSON 字符串
const char *json_string = "{\"name\": \"Alice\", \"age\": 25}";
// 解析 JSON 字符串
cJSON *json = cJSON_Parse(json_string);
if (json == NULL) {
printf("Error parsing JSON.\n");
return -1;
}
// 修改值
cJSON *name = cJSON_GetObjectItem(json, "name");
if (cJSON_IsString(name)) {
cJSON_SetValuestring(name, "Bob");
}
// 添加新字段
cJSON_AddStringToObject(json, "city", "Los Angeles");
// 输出修改后的 JSON 对象
char *json_string_new = cJSON_Print(json);
printf("Modified JSON: \n%s\n", json_string_new);
// 清理内存
free(json_string_new);
cJSON_Delete(json);
return 0;
}
输出:
{
"name": "Bob",
"age": 25,
"city": "Los Angeles"
}
5. 嵌套 JSON 对象和数组
此示例展示了如何创建包含嵌套对象和数组的复杂 JSON 数据结构。
#include <stdio.h>
#include <stdlib.h>
#include <cjson/cJSON.h>
int main() {
// 创建顶层 JSON 对象
cJSON *root = cJSON_CreateObject();
// 添加简单数据
cJSON_AddStringToObject(root, "name", "Alice");
cJSON_AddNumberToObject(root, "age", 25);
// 创建一个嵌套的 JSON 对象
cJSON *address = cJSON_CreateObject();
cJSON_AddStringToObject(address, "street", "123 Main St");
cJSON_AddStringToObject(address, "city", "New York");
cJSON_AddStringToObject(address, "zip", "10001");
// 将嵌套的对象添加到顶层对象
cJSON_AddItemToObject(root, "address", address);
// 创建一个嵌套的 JSON 数组
cJSON *skills = cJSON_CreateArray();
cJSON_AddStringToArray(skills, "C");
cJSON_AddStringToArray(skills, "C++");
cJSON_AddStringToArray(skills, "Python");
// 将数组添加到顶层对象
cJSON_AddItemToObject(root, "skills", skills);
// 打印最终的 JSON 字符串
char *json_string = cJSON_Print(root);
printf("Complex JSON: \n%s\n", json_string);
// 清理内存
free(json_string);
cJSON_Delete(root);
return 0;
}
输出:
{
"name": "Alice",
"age": 25,
"address": {
"street": "123 Main St",
"city": "New York",
"zip": "10001"
},
"skills": ["C", "C++", "Python"]
}
6. 从文件中读取 JSON 并解析
此示例展示了如何从文件中读取 JSON 数据并解析它。
#include <stdio.h>
#include <stdlib.h>
#include <cjson/cJSON.h>
char *read_file(const char *filename) {
FILE *file = fopen(filename, "r");
if (!file) {
perror("Failed to open file");
return NULL;
}
// 获取文件大小
fseek(file, 0, SEEK_END);
long length = ftell(file);
fseek(file, 0, SEEK_SET);
// 读取文件内容
char *content = (char *)malloc(length + 1);
if (content) {
fread(content, 1, length, file);
content[length] = '\0'; // 确保字符串结尾
}
fclose(file);
return content;
}
int main() {
// 读取 JSON 文件内容
const char *filename = "data.json";
char *file_content = read_file(filename);
if (!file_content) {
return -1;
}
// 解析 JSON 字符串
cJSON *json = cJSON_Parse(file_content);
free(file_content); // 读取后释放内存
if (json == NULL) {
printf("Error parsing JSON.\n");
return -1;
}
// 访问数据
cJSON *name = cJSON_GetObjectItem(json, "name");
cJSON *age = cJSON_GetObjectItem(json, "age");
printf("Name: %s\n", name->valuestring);
printf("Age: %d\n", age->valueint);
// 清理内存
cJSON_Delete(json);
return 0;
}
7. 将修改后的 JSON 写回文件
此示例展示了如何将修改后的 JSON 对象写回文件。
#include <stdio.h>
#include <stdlib.h>
#include <cjson/cJSON.h>
int write_to_file(const char *filename, cJSON *json) {
FILE *file = fopen(filename, "w");
if (!file) {
perror("Failed to open file for writing");
return -1;
}
// 将 JSON 对象格式化为字符串并写入文件
char *json_str = cJSON_Print(json);
if (json_str) {
fprintf(file, "%s\n", json_str);
free(json_str);
}
fclose(file);
return 0;
}
int main() {
// 创建一个简单的 JSON 对象
cJSON *root = cJSON_CreateObject();
cJSON_AddStringToObject(root, "name", "Alice");
cJSON_AddNumberToObject(root, "age", 25);
// 写入到文件
const char *filename = "output.json";
if (write_to_file(filename, root) != 0) {
return -1;
}
// 清理内存
cJSON_Delete(root);
printf("JSON data written to %s\n", filename);
return 0;
}
总结
这些示例展示了如何在 C 语言中使用 cJSON 库进行常见的 JSON 操作,包括创建、修改、访问、解析和存储 JSON 数据。你可以根据这些基础操作灵活地处理 JSON 数据,构建复杂的 JSON 结构来满足应用需求。
原文地址:https://blog.csdn.net/qq_39642740/article/details/144769584
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!