cJSON学习笔记

这篇博客介绍了如何安装和使用cJSON库,包括组包、解包和解包与可变参数的处理。重点讨论了通过优化内存分配来提升cJSON性能,如在堆上预定义缓冲区以加速malloc和free操作。测试结果显示在树莓派4B上进行了1000000次循环的性能测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安装

https://github.com/DaveGamble/cJSON

组包

#include <stdio.h>
#include "cJSON.h"

int main(){
   
    // 创建dict结点
    cJSON *root = cJSON_CreateObject();

    // 添加string子节点
    cJSON_AddItemToObject(root, "name", cJSON_CreateString("Jack (\"Bee\") Nimble"));

    // 添加number子节点
    cJSON_AddItemToObject(root, "age", cJSON_CreateNumber(20));

    // 添加bool子节点
    cJSON_AddItemToObject(root, "best", cJSON_CreateBool(cJSON_True));

    // 添加bool子节点
    cJSON_AddItemToObject(root, "worse", cJSON_CreateFalse());

    // 添加NULL子节点
    cJSON_AddItemToObject(root, "address", cJSON_CreateNull());

    // 添加array
    cJSON *string_array = cJSON_CreateArray();
    cJSON_AddItemToObject(string_array,"hello",cJSON_CreateString("hello"));
    cJSON_AddItemToObject(string_array,"world",cJSON_CreateString("world"));
    cJSON_AddItemToObject(root,"string",string_array);

    // 添加array
    int nums[] = {
   1,2,3,4,5,6};
    cJSON *nums_array = cJSON_CreateIntArray(nums,sizeof(nums)/sizeof(int));
    cJSON_AddItemToObject(root,"nums",nums_array);

    // 格式化输出, 调用malloc
    printf("%s\n",cJSON_Print(root));

    // 非格式化输出, 调用malloc
    printf("%s\n",cJSON_PrintUnformatted(root));

    // 不调用malloc
    char buffer[4096] = {
   0};
    cJSON_PrintPreallocated(root,buffer,sizeof(buffer),0);//0 非格式化, 1格式化
    printf("%s\n",buffer);

    // 删除节点, 如果直接调用cJSON_Delete删除某个节点, print的时候会出错的
    cJSON_DeleteItemFromObjectCaseSensitive(root,"age");// 大小写敏感
    // cJSON_DeleteItemFromObject// 大小写不敏感

    // 更新节点
    cJSON_ReplaceItemInObjectCaseSensitive(root,"name",cJSON_CreateString("小明"));// 大小写敏感
    // cJSON_ReplaceItemInObject// 大小写不敏感

    // 格式化输出, 调用malloc
    printf("%s\n",cJSON_Print(root));

    // 删除根节点
    cJSON_Delete(root);
}

解包

#include <stdio.h>
#include "cJSON.h"

int main(){
   
    char s[] = "{\"name\":\"Jack (\\\"Bee\\\") Nimble\",\"age\":20,\"best\":true,\"worse\":false,\"address\":null,\"string\":[\"hello\",\"world\"],\"nums\":[1,2,3,4,5,6]}";

    cJSON *root, *object, 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值