如何正确使用CJson库进行数据接收?

cJSON 是一个轻量级的 JSON 解析和生成库,用于 C 语言。它提供了简单的 API 来处理 JSON 数据,包括解析、生成和操作 JSON 对象和数组。

cJSON 接收例子

如何正确使用CJson库进行数据接收?

cJSON 是一个轻量级的 JSON 解析库,使用 C 语言实现,它非常适用于嵌入式系统和需要高效处理 JSON 数据的场景,本文将详细介绍如何使用 cJSON 进行 JSON 数据的接收和解析,并提供相关示例代码。

cJSON 基本概念

在开始之前,我们需要了解一些关于 cJSON 的基本概念:

1、cJSON 类型:cJSON 支持多种数据类型,包括逻辑值、null、数字、字符串、数组和对象。

2、cJSON 结构体:cJSON 使用结构体来表示 JSON 数据,每个节点由cJSON 结构体组成,包含类型、值以及指向子节点的指针。

3、cJSON 函数:常用的 cJSON 函数包括cJSON_Parse(解析 JSON 字符串)、cJSON_GetObjectItem(获取对象项)、cJSON_Delete(删除 cJSON 对象)等。

JSON 数据格式

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,以键值对的形式存在,以下是一些常见的 JSON 数据类型:

逻辑值:如truefalse

null

如何正确使用CJson库进行数据接收?

数字:整数或浮点数

字符串:用双引号括起来

数组:用中括号[] 包含多个值

对象:用大括号{} 包含多个键值对

cJSON 接收和解析示例

示例 1:解析简单的 JSON 字符串

下面是一个简单的示例,演示如何使用 cJSON 解析一个简单的 JSON 字符串。

#include <stdio.h>
#include <stdlib.h>
#include "cJSON.h"
int main() {
    char jsonData[] = "{\"name\":\"C Primer pluse\",\"pages\":626}";
    // 解析 JSON 字符串
    cJSON *srcJsonData = cJSON_Parse(jsonData);
    if (!srcJsonData) {
        printf("Error before: [%s]
", cJSON_GetErrorPtr());
        return -1;
    }
    // 获取并打印 JSON 数据的内容
    cJSON *value;
    value = cJSON_GetObjectItem(srcJsonData, "name");
    if (value->type == cJSON_String) {
        printf("书名:%s
", value->valuestring);
    }
    value = cJSON_GetObjectItem(srcJsonData, "pages");
    if (value->type == cJSON_Number) {
        printf("页数:%d
", value->valueint);
    }
    // 释放 JSON 对象的内存
    cJSON_Delete(srcJsonData);
    return 0;
}

运行结果

书名:C Primer pluse
页数:626

示例 2:解析复杂的 JSON 文件

如何正确使用CJson库进行数据接收?

当 JSON 数据较大时,通常使用文件保存 JSON 数据,下面是一个示例,演示如何从文件中读取并解析 JSON 数据。

假设有一个名为data.txt 的文件,内容如下:

{
    "class": "C语言书籍",
    "books": [
        {
            "name": "C Primer pluse",
            "author": "Stephen Prata",
            "publishing": "人民邮电出版社"
        },
        {
            "name": "C程序设计",
            "author": "谭浩强",
            "publishing": "清华大学出版社"
        },
        {
            "name": "C陷阱与缺陷",
            "author": "Andrew Koenig",
            "publishing": "人民邮电出版社"
        }
    ]
}

解析该文件的代码如下:

#include <stdio.h>
#include <stdlib.h>
#include "cJSON.h"
int main() {
    FILE *fp = fopen("data.txt", "r");
    if (fp == NULL) {
        perror("Failed to open file");
        return -1;
    }
    // 获取文件大小
    fseek(fp, 0, SEEK_END);
    long length = ftell(fp);
    fseek(fp, 0, SEEK_SET);
    // 分配内存并读取文件内容
    char *data = (char *)malloc(length + 1);
    fread(data, 1, length, fp);
    data[length] = '\0';
    fclose(fp);
    // 解析 JSON 数据
    cJSON *root = cJSON_Parse(data);
    if (!root) {
        printf("Error before: [%s]
", cJSON_GetErrorPtr());
        free(data);
        return -1;
    }
    // 获取并打印 class 的值
    cJSON *value = cJSON_GetObjectItem(root, "class");
    if (value->type == cJSON_String) {
        printf("类别:%s
", value->valuestring);
    }
    // 获取并打印 books 数组中的每一项
    cJSON *books = cJSON_GetObjectItem(root, "books");
    if (books && books->type == cJSON_Array) {
        int numBooks = cJSON_GetArraySize(books);
        for (int i = 0; i < numBooks; i++) {
            cJSON *book = cJSON_GetArrayItem(books, i);
            cJSON *name = cJSON_GetObjectItem(book, "name");
            cJSON *author = cJSON_GetObjectItem(book, "author");
            cJSON *publishing = cJSON_GetObjectItem(book, "publishing");
            if (name && author && publishing) {
                printf("书名:%s, 作者:%s, 出版社:%s
", name->valuestring, author->valuestring, publishing->valuestring);
            }
        }
    }
    // 释放 JSON 对象的内存
    cJSON_Delete(root);
    free(data);
    return 0;
}

运行结果

类别:C语言书籍
书名:C Primer pluse, 作者:Stephen Prata, 出版社:人民邮电出版社
书名:C程序设计, 作者:谭浩强, 出版社:清华大学出版社
书名:C陷阱与缺陷, 作者:Andrew Koenig, 出版社:人民邮电出版社

通过上述两个示例,我们展示了如何使用 cJSON 解析简单的 JSON 字符串和复杂的 JSON 文件,cJSON 提供了简洁易用的 API,使得在 C 语言中处理 JSON 数据变得非常方便,无论是简单的键值对还是复杂的嵌套结构,cJSON 都能轻松应对。

各位小伙伴们,我刚刚为大家分享了有关“cjson 接收例子”的知识,希望对你们有所帮助。如果您还有其他相关问题需要解决,欢迎随时提出哦!

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/47686.html<

(0)
运维的头像运维
上一篇2025-01-06 12:26
下一篇 2025-01-06 12:46

相关推荐

  • 什么是CJson?它有哪些特点和用途?

    cJSON 是一个轻量级的 JSON 解析库,用于 C 语言。它简单易用,适合嵌入式系统和资源受限的环境。

    2025-01-06
    0
  • 什么是CJSON?它有哪些独特之处?

    cJSON 是一个轻量级的 JSON 解析库,用于在 C 语言中处理 JSON 数据。

    2025-01-06
    0
  • 如何理解串口通信中一帧数据的具体格式?

    串口通信一帧数据格式通常包括起始位、数据位、奇偶校验位和停止位,用于在设备间传输信息。

    2024-12-07
    0
  • 如何利用串口数据存储开发板实现高效数据管理?

    串口数据存储开发板是一种集成了串口通信和数据存储功能的硬件设备,通常用于嵌入式系统中。它通过串口接口与计算机或其他设备进行通信,实现数据的读取、写入和存储。这种开发板可以方便地用于数据采集、传输和处理等应用。

    2024-12-07
    0
  • 如何在C语言中读取JSON数组?

    在C语言中,读取JSON数组通常需要使用第三方库,如cJSON。以下是一个示例代码片段:,,“c,#include,#include,#include “cJSON.h”,,int main() {, const char *json_string = “[{\”name\”: \”John\”, \”age\”: 30}, {\”name\”: \”Jane\”, \”age\”: 25}]”;, cJSON *json_array = cJSON_Parse(json_string);, if (json_array == NULL) {, printf(“Error parsing JSON\n”);, return 1;, },, int array_size = cJSON_GetArraySize(json_array);, for (int i = 0; ivaluestring != NULL)) {, printf(“Name: %s\n”, name-˃valuestring);, }, if (cJSON_IsNumber(age)) {, printf(“Age: %d\n”, age-˃valueint);, }, },, cJSON_Delete(json_array);, return 0;,},“,,这个代码片段展示了如何使用cJSON库解析一个包含多个对象的JSON数组,并打印每个对象中的“name”和“age”字段。

    2024-12-03
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注