当前位置: 首页 > backend >正文

C语言中封装JSON数组对象

在C语言中处理JSON数组对象,你可以使用一些流行的JSON库,如 cJSON、Jansson 或 json-c。下面我将以 cJSON 为例,展示如何创建、封装和处理JSON数组对象。

使用 cJSON 库

首先,你需要下载并包含 cJSON 库。cJSON 是一个轻量级的C语言JSON解析器。

示例代码

#include <stdio.h>
#include <stdlib.h>
#include "cJSON.h"int main() {// 创建一个JSON数组cJSON *json_array = cJSON_CreateArray();if (json_array == NULL) {fprintf(stderr, "Failed to create JSON array\n");return EXIT_FAILURE;}// 向数组中添加不同类型的元素cJSON_AddItemToArray(json_array, cJSON_CreateString("Apple"));cJSON_AddItemToArray(json_array, cJSON_CreateString("Banana"));cJSON_AddItemToArray(json_array, cJSON_CreateNumber(42));cJSON_AddItemToArray(json_array, cJSON_CreateBool(1)); // true// 创建一个嵌套的对象并添加到数组中cJSON *nested_object = cJSON_CreateObject();cJSON_AddStringToObject(nested_object, "name", "Charlie");cJSON_AddNumberToObject(nested_object, "age", 30);cJSON_AddItemToArray(json_array, nested_object);// 将JSON数组转换为字符串char *json_string = cJSON_Print(json_array);if (json_string != NULL) {printf("JSON Array:\n%s\n", json_string);free(json_string);}// 解析JSON数组const char *json_to_parse = "[\"Red\", \"Green\", \"Blue\", 123, true]";cJSON *parsed_array = cJSON_Parse(json_to_parse);if (parsed_array != NULL && cJSON_IsArray(parsed_array)) {printf("\nParsed JSON Array:\n");cJSON *item = NULL;cJSON_ArrayForEach(item, parsed_array) {if (cJSON_IsString(item)) {printf("String: %s\n", item->valuestring);} else if (cJSON_IsNumber(item)) {printf("Number: %d\n", item->valueint);} else if (cJSON_IsBool(item)) {printf("Boolean: %s\n", item->valueint ? "true" : "false");}}}// 释放内存cJSON_Delete(json_array);cJSON_Delete(parsed_array);return EXIT_SUCCESS;
}

代码说明

  1. 创建JSON数组:使用 cJSON_CreateArray() 函数创建一个空数组。

  2. 添加元素:使用 cJSON_AddItemToArray() 向数组中添加各种类型的元素。

  3. 嵌套对象:可以创建对象并作为元素添加到数组中。

  4. 序列化:使用 cJSON_Print() 将JSON结构转换为字符串。

  5. 解析:使用 cJSON_Parse() 解析JSON字符串并遍历数组元素。

  6. 内存管理:使用 cJSON_Delete() 释放分配的内存。

http://www.xdnf.cn/news/1651.html

相关文章:

  • 深度解析@SneakyThrows注解:原理、应用与最佳实践
  • 23种设计模式-行为型模式之策略模式(Java版本)
  • 基于 EFISH-SBC-RK3588 的无人机环境感知与数据采集方案
  • DPIN在AI+DePIN孟买峰会阐述全球GPU生态系统的战略愿景
  • MySQL:数据库设计
  • 【C++入门:类和对象】[3]
  • LJF-Framework 第15章 想想搞点啥-若依管理系统兼容一下
  • 在Windows11上用wsl配置docker register 镜像地址
  • django admin 添加自定义页面
  • 从码云上拉取项目并在idea配置npm时完整步骤
  • netty中的Channel与Java NIO中的Channel核心对比
  • docker 配置代理
  • 3、ArkTS语言介绍
  • 数据完整性的守护者:哈希算法原理与实现探析
  • Redis的过期删除策略和内存淘汰策略
  • Django创建的应用目录详细解释以及如何操作数据库自动创建表
  • R/G-B/G色温坐标系下对横纵坐标取对数的优势
  • Java中的阻塞队列有界和无界区别
  • Langchain检索YouTube字幕
  • Axure复选框组件的深度定制:实现自定义大小、颜色与全选功能
  • react-09React生命周期
  • 解析塔能科技:绿色低碳智慧节能一站式破局之匙
  • 极狐GitLab 如何从 CSV 导入议题?
  • 实时步数统计系统 kafka + spark +redis
  • 4.1 融合架构设计:LLM与Agent的协同工作模型
  • 遨游三防|30200mAh、双露营灯三防平板,见证堆料天花板
  • 多语言笔记系列:使用用户输入
  • Python爬虫爬取图片并存储到MongoDB(注意:仅尝试存储一条空的示例数据到MongoDB,验证MongoDB的联通性)
  • 220V转18V600mA非隔离芯片WT5110
  • 【防火墙 pfsense】1简介