CJSON:C语言中的轻量级JSON解析库

随着互联网技术和移动智能设备的迅猛发展,JSON(JavaScript Object Notation)已经成为了一种流行的数据传输和存储格式。在C语言中,CJSON是一种轻量级的JSON解析库,可以方便地解析和处理JSON格式数据。

一、CJSON库的基本使用

1、下载安装

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

2、解析JSON数据

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

int main()
{
    const char* json = "{ \"name\":\"John\", \"age\":20, \"isStudent\":true }";
    cJSON* jsonRoot = cJSON_Parse(json);

    char* name = cJSON_GetObjectItem(jsonRoot, "name")->valuestring;
    int age = cJSON_GetObjectItem(jsonRoot, "age")->valueint;
    int isStudent = cJSON_GetObjectItem(jsonRoot, "isStudent")->valueint;

    printf("name: %s\nage: %d\nisStudent: %s", name, age, (isStudent == 1) ? "true" : "false");

    cJSON_Delete(jsonRoot);
    return 0;
}

3、生成JSON数据

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

int main()
{
    cJSON* jsonRoot = cJSON_CreateObject();
    cJSON* jsonName = cJSON_CreateString("John");
    cJSON* jsonAge = cJSON_CreateNumber(20);
    cJSON* jsonIsStudent = cJSON_CreateBool(true);

    cJSON_AddItemToObject(jsonRoot, "name", jsonName);
    cJSON_AddItemToObject(jsonRoot, "age", jsonAge);
    cJSON_AddItemToObject(jsonRoot, "isStudent", jsonIsStudent);

    char* jsonStr = cJSON_PrintUnformatted(jsonRoot);
    printf("jsonStr: %s", jsonStr);

    cJSON_Delete(jsonRoot);
    return 0;
}

二、CJSON库的高级使用

1、解析复杂JSON数据

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

int main()
{
    const char* json = "{ \"name\":\"John\", \"age\":20, \"isStudent\":true, \"contact\": { \"phone\": \"123456789\", \"email\": \"john@gmail.com\" }, \"hobbies\":[\"basketball\", \"reading\", \"swimming\"] }";
    cJSON* jsonRoot = cJSON_Parse(json);

    char* name = cJSON_GetObjectItem(jsonRoot, "name")->valuestring;
    int age = cJSON_GetObjectItem(jsonRoot, "age")->valueint;
    int isStudent = cJSON_GetObjectItem(jsonRoot, "isStudent")->valueint;
    char* phone = cJSON_GetObjectItem(cJSON_GetObjectItem(jsonRoot, "contact"), "phone")->valuestring;
    char* email = cJSON_GetObjectItem(cJSON_GetObjectItem(jsonRoot, "contact"), "email")->valuestring;

    printf("name: %s\nage: %d\nisStudent: %s\nphone: %s\nemail: %s\n", name, age, (isStudent == 1) ? "true" : "false", phone, email);

    cJSON* hobbies = cJSON_GetObjectItem(jsonRoot, "hobbies");
    cJSON* hobby = NULL;
    int index = 0;
    cJSON_ArrayForEach(hobby, hobbies)
    {
        printf("hobby[%d]: %s\n", index, hobby->valuestring);
        index++;
    }

    cJSON_Delete(jsonRoot);
    return 0;
}

2、生成带格式化的JSON数据

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

int main()
{
    cJSON* jsonRoot = cJSON_CreateObject();
    cJSON* jsonName = cJSON_CreateString("John");
    cJSON* jsonAge = cJSON_CreateNumber(20);
    cJSON* jsonIsStudent = cJSON_CreateBool(true);
    cJSON* jsonContact = cJSON_CreateObject();
    cJSON_AddItemToObject(jsonContact, "phone", cJSON_CreateString("123456789"));
    cJSON_AddItemToObject(jsonContact, "email", cJSON_CreateString("john@gmail.com"));
    cJSON* jsonHobbies = cJSON_CreateArray();
    cJSON_AddItemToArray(jsonHobbies, cJSON_CreateString("basketball"));
    cJSON_AddItemToArray(jsonHobbies, cJSON_CreateString("reading"));
    cJSON_AddItemToArray(jsonHobbies, cJSON_CreateString("swimming"));

    cJSON_AddItemToObject(jsonRoot, "name", jsonName);
    cJSON_AddItemToObject(jsonRoot, "age", jsonAge);
    cJSON_AddItemToObject(jsonRoot, "isStudent", jsonIsStudent);
    cJSON_AddItemToObject(jsonRoot, "contact", jsonContact);
    cJSON_AddItemToObject(jsonRoot, "hobbies", jsonHobbies);

    char* jsonStr = cJSON_PrintIndented(jsonRoot);
    printf("jsonStr: \n%s", jsonStr);

    cJSON_Delete(jsonRoot);
    return 0;
}

三、CJSON库的注意事项

1、使用完以后,要记得使用 cJSON_Delete函数清理生成的JSON对象。

2、解析JSON数据时,需要根据数据类型选择对应的解析函数,比如字符串、数字、数组等等。

3、生成JSON数据时,如果键值对中的键名已经存在,则会被覆盖。

4、在使用 cJSON_AddItemToArray函数将一个JSON对象添加到数组中时,要保证这个JSON对象没有被其他JSON对象引用,因为 cJSON_AddItemToArray函数内部会将添加的JSON对象的 next指针置为 NULL。

总之,CJSON是一款小巧、简单、易用的JSON解析库,可以方便地在C语言项目中使用,能够轻松地解决JSON数据的解析和生成问题。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/232058.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-11 12:49
下一篇 2024-12-11 12:49

相关推荐

  • AES加密解密算法的C语言实现

    AES(Advanced Encryption Standard)是一种对称加密算法,可用于对数据进行加密和解密。在本篇文章中,我们将介绍C语言中如何实现AES算法,并对实现过程进…

    编程 2025-04-29
  • 学习Python对学习C语言有帮助吗?

    Python和C语言是两种非常受欢迎的编程语言,在程序开发中都扮演着非常重要的角色。那么,学习Python对学习C语言有帮助吗?答案是肯定的。在本文中,我们将从多个角度探讨Pyth…

    编程 2025-04-29
  • Python被称为胶水语言

    Python作为一种跨平台的解释性高级语言,最大的特点是被称为”胶水语言”。 一、简单易学 Python的语法简单易学,更加人性化,这使得它成为了初学者的入…

    编程 2025-04-29
  • OpenJudge答案1.6的C语言实现

    本文将从多个方面详细阐述OpenJudge答案1.6在C语言中的实现方法,帮助初学者更好地学习和理解。 一、需求概述 OpenJudge答案1.6的要求是,输入两个整数a和b,输出…

    编程 2025-04-29
  • Python按位运算符和C语言

    本文将从多个方面详细阐述Python按位运算符和C语言的相关内容,并给出相应的代码示例。 一、概述 Python是一种动态的、面向对象的编程语言,其按位运算符是用于按位操作的运算符…

    编程 2025-04-29
  • JSON的MD5

    在Web开发过程中,JSON(JavaScript Object Notation)是最常用的数据格式之一。MD5(Message-Digest Algorithm 5)是一种常用…

    编程 2025-04-29
  • 使用Java将JSON写入HDFS

    本篇文章将从以下几个方面详细阐述Java将JSON写入HDFS的方法: 一、HDFS简介 首先,先来了解一下Hadoop分布式文件系统(HDFS)。HDFS是一个可扩展性高的分布式…

    编程 2025-04-29
  • Python语言由荷兰人为中心的全能编程开发工程师

    Python语言是一种高级语言,很多编程开发工程师都喜欢使用Python语言进行开发。Python语言的创始人是荷兰人Guido van Rossum,他在1989年圣诞节期间开始…

    编程 2025-04-28
  • Python语言设计基础第2版PDF

    Python语言设计基础第2版PDF是一本介绍Python编程语言的经典教材。本篇文章将从多个方面对该教材进行详细的阐述和介绍。 一、基础知识 本教材中介绍了Python编程语言的…

    编程 2025-04-28
  • Python语言实现人名最多数统计

    本文将从几个方面详细介绍Python语言实现人名最多数统计的方法和应用。 一、Python实现人名最多数统计的基础 1、首先,我们需要了解Python语言的一些基础知识,如列表、字…

    编程 2025-04-28

发表回复

登录后才能评论