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

cJson系列——如何调用cjson库

cJson系列


如何调用cjson库


在C语言中,处理JSON数据通常使用第三方库,如 cJSONjansson。下面以 cJSON 为例,演示如何调用JSON解析函数的流程

1.安装 cJSON 库

首先,确保你的环境中安装了 cJSON 库。可以从 cJSON GitHub 页面 下载源代码,或使用包管理器安装(例如在Linux系统中使用apt-get)。

如果使用 cJSON 的源代码:

git clone https://github.com/DaveGamble/cJSON.git
cd cJSON
make
sudo make install

2. 包含头文件

在你的 C 代码中包含 cJSON 的头文件。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <cjson/cJSON.h>

3. 解析 JSON 字符串

#include <stdio.h>
#include <stdlib.h>
#include <string.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 (name && age && city) {
        printf("Name: %s\n", name->valuestring);
        printf("Age: %d\n", age->valueint);
        printf("City: %s\n", city->valuestring);
    } else {
        printf("Error: Missing expected key.\n");
    }

    // 释放 JSON 对象
    cJSON_Delete(json);

    return 0;
}

4. 解释流程

  • 创建 JSON 字符串:你定义了一个 JSON 格式的字符串,例如:"{\"name\": \"John\", \"age\": 30, \"city\": \"New York\"}"
  • 解析 JSON:调用 cJSON_Parse() 函数解析 JSON 字符串,并返回一个指向 cJSON 结构体的指针。如果解析失败,返回 NULL
  • 提取 JSON 对象的值
    • 使用 cJSON_GetObjectItem() 函数从解析后的 JSON 对象中获取特定键的值。
    • 对于字符串值,使用 ->valuestring 来访问值;对于整型值,使用 ->valueint
  • 释放内存:解析完毕后,调用 cJSON_Delete() 来释放 JSON 对象占用的内存。

5. 编译和运行

如果你将上面的代码保存为 json_example.c,并且你的系统已经安装了 cJSON,可以使用以下命令来编译和运行:

gcc json_example.c -o json_example -lcjson
./json_example

6. 输出结果

如果输入的 JSON 格式正确,程序会输出:

Name: John
Age: 30
City: New York


http://www.kler.cn/a/458739.html

相关文章:

  • linux装git
  • AI 智能助手对话系统
  • c++表达范围勿用数学符号
  • 【Vim Masterclass 笔记04】S03L12:Vim 文本删除同步练习课 + S03L13:练习课点评
  • 保姆级教程Docker部署ClickHouse镜像
  • 深度学习——损失函数汇总
  • Docker怎么关闭容器开机自启,批量好几个容器一起操作?
  • 2024:踏平坎坷成大道,斗罢艰险又出发!
  • 软件工程测试汇总SDUT
  • 【ES6复习笔记】ES6的模块化(18)
  • NetSuite Formula(HTML)超链打开Transaction
  • TOGAF之架构标准规范-业务架构
  • 行业分析---造车新势力之零跑汽车
  • 权限注解+AOP切面+额外工具(UUID生成id,JWT,Servlet客户端,字符串String工具类,Redis序列化,ip工具类)
  • 在iOS上游玩ONS游戏 - RenpyReader!
  • CSV vs 数据库:爬虫数据存储的最佳选择是什么
  • Vue使用pages构建多页应用
  • 创意无限!利用Cpolar和Flux.1实现远程AI图像生成功能
  • 默认接口实现”在 C# 7.3 中不可用。请使用 8.0 或更高的语言版本报错问题
  • 亚马逊云科技re:Invent:2025年将发生新变化
  • uni-app开发-识图小程序-主要功能以及首页实现
  • 初始 ShellJS:一个 Node.js 命令行工具集合
  • redis清除策略
  • 主从复制架构介绍和主从复制配置案例
  • Elasticsearch filter context 的使用原理
  • 算法基础二:选择排序