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

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() 释放分配的内存。

相关文章:

  • 使用RabbitMQ实现判题功能
  • 从入门到精通【MySQL】视图与用户权限管理
  • 大屏资源汇总
  • DS B/B+/B*树及其应用(21)
  • 电子削铅笔刀顺序图详解:从UML设计到PlantUML实现
  • JMeter 安装及使用 [软件测试工具]
  • C++ 日志系统实战第二步:不定参数函数解析
  • 经验分享 | 如何高效使用 `git commit --amend` 修改提交记录
  • 项目右键没有add as maven project选项
  • 实时步数统计系统 kafka + spark +redis
  • springboot在eclipse里面运行 run as 是Java Application还是 Maven
  • 如何创建一个父类 Maven项目,然后在父类下再创建子项目,构建多模块 Maven 项目
  • 深入浅出JavaScript常见设计模式:从原理到实战(1)
  • 基于Python+Flask的MCP SDK响应式文档展示系统设计与实现
  • 第J5周:DenseNet+SE-Net实战
  • 机器学习漏洞大汇总——利用机器学习服务
  • 手撕C++STL list:深入理解双向链表的实现
  • 电子病历高质量语料库构建方法与架构项目(计划篇)
  • CSS3 基础(背景-文本效果)
  • Flask + ajax上传文件(二)--多文件上传
  • 朱守科任西藏自治区政府副主席、公安厅厅长
  • 给印度立“人设”:万斯访印祭出美国关税战新招,但效果存疑
  • 上海小朋友喜欢读什么书?来看这份“少年儿童阅读报告”
  • 土耳其发生6.2级地震,震源深度10千米
  • 十三届全国政协经济委员会副主任张效廉严重违纪违法被开除党籍
  • 全国人大常委会启动工会法执法检查