cjson 判断字段是否纯在_cJSON API 接口使用说明

2023-11-07

cJSON API 接口使用说明

cJSON的介绍

cJSON是一个轻量级的JSON解析器使用ANSIC标准。

所谓的轻量级,如果你的项目需要使用到解析JSON,那么只需要将cJSON的库中的cJSON.h和cJSON.c放入到你的项目中适当的位置就行了。

目前介绍的cJSON的版本为1.5.7。

cJSON库的项目的github地址为:cJSON

在项目的过程中还使用都了shell文件的解析JSON的库,也是轻量级的就是一个JSON.sh文件。

有兴趣的可以看一下这个shell的JSON库, JSON.sh

现在已经有了各种语言的解析的JSON的库,大家可以自行到github上面搜索

为什么介绍cJSON

在项目中需要使用到cJSON的解析JSON库,但是总感觉有点用起来不顺手,所以就自己写些demo来使用这些接口。

主要一些cJSON的接口使用到内存分配的问题,所以特别要注意,而且就在1.5.7刚刚修复了一个内存的问题。

组内还在讨论要不要,把cJSON的问题再升级一下。

自己做了写了一些非常简陋并且丑陋的example代码,link 下面的cjson文件下

cJSON API 使用总结cJSON API

说明

备注

cJSON_Version()

获得cJSON的版本

返回字符串常量

cJSON_InitHooks();

初始化cJSON_Hooks结构体

没太明白

cJSON_Parse();

将字符串解析成cJSON结构体

cJSON_ParseWithOpts()

使用一些配置解析字符串

cJSON_Print()

将cJSON结构体转换成格式化的字符串

cJSON_PrintUnformatted()

将cJSON结构体转换成未格式化的字符串

cJSON_PrintBuffered()

将cJSON结构体使用buffer的字符串,格式化可选

cJSON_PrintPreallocated()

将cJSON结构体使用预分配的内存的字符串,格式化可选

cJSON_Delete()

删除cJSON结构体

删除子对象,所有都会删除

cJSON_GetArraySize()

返回Array类型的大小,对Object类型也是有效的

cJSON_GetArrayItem()

返回Array类型的index的值,对Object类型也有效

cJSON_GetObjectItem()

使用key获得对应的value

cJSON_GetObjectItemCaseSensitive()

使用对大小写敏感的key获得对应的value

cJSON_HasObjectItem()

判断是否ObjectItem存在

cJSON_GetErrorPtr()

获得错误信息

cJSON_IsInvalid()

类型判断

cJSON_IsFalse()

类型判断

cJSON_IsTrue()

类型判断

cJSON_IsBool()

类型判断

cJSON_IsNull()

类型判断

cJSON_IsNumber()

类型判断

cJSON_IsString()

类型判断

cJSON_IsArray()

类型判断

cJSON_IsObject()

类型判断

cJSON_IsRaw()

类型判断

cJSON_CreateNull()

创造对应类型的cJSON

cJSON_CreateTrue()

创造对应类型的cJSON

cJSON_CreateFalse()

创造对应类型的cJSON

cJSON_CreateBool()

创造对应类型的cJSON

cJSON_CreateNumber()

创造对应类型的cJSON

cJSON_CreateString()

创造对应类型的cJSON

cJSON_CreateRaw()

创造对应类型的cJSON

cJSON_CreateArray()

创造对应类型的cJSON

cJSON_CreateObject()

创造对应类型的cJSON

cJSON_CreateIntArray()

批量创造对应类型的cJSON

cJSON_CreateFloatArray()

批量创造对应类型的cJSON

cJSON_CreateDoubleArray()

批量创造对应类型的cJSON

cJSON_CreateStringArray()

批量创造对应类型的cJSON

cJSON_AddItemToArray()

在指定Array后面增加Item

cJSON_AddItemToObject()

在指定Object后面增加Item

cJSON_AddItemToObjectCS()

在指定Object后面增加const Item

cJSON_AddItemReferenceToArray()

在指定Array后面增加Item引用

cJSON_DetachItemViaPointer()

通过指针从Array删除Item的引用

这个自己理解

cJSON_DetachItemFromArray()

从Array删除Item的引用

cJSON_DeleteItemFromArray()

从Array删除Item

cJSON_DetachItemFromObject()

从Object删除Item的引用

cJSON_DetachItemFromObjectCaseSensitive()

大小写敏感的从Object删除Item的引用

cJSON_DeleteItemFromObject()

从Object删除Item

cJSON_DeleteItemFromObjectCaseSensitive()

大小写敏感的从Object删除Item

cJSON_InsertItemInArray()

在Array指定位置插入Item

cJSON_ReplaceItemViaPointer()

使用指针替代Item

cJSON_ReplaceItemInArray()

替换Array的Item

cJSON_ReplaceItemInObject()

替换Object的Item

`cJSON_ReplaceItemInObjectCaseSensitive()

大小写敏感的替换Object的Item

cJSON_Duplicate()

复制cJSON结构体

cJSON_Compare()

比较两个cJSON结构体

cJSON_Minify()

将格式化的字符串压缩

cJSON_AddNullToObject()

调用cJSON_AddItemToObject和cJSON_CreateNull

cJSON_AddTrueToObject()

调用cJSON_AddItemToObject和cJSON_CreateTrue

cJSON_AddFalseToObject()

调用cJSON_AddItemToObject和cJSON_CreateFalse

cJSON_AddBoolToObject()

调用cJSON_AddItemToObject和cJSON_CreateBool

cJSON_AddNumberToObject()

调用cJSON_AddItemToObject和cJSON_CreateNumber

cJSON_AddStringToObject()

调用cJSON_AddItemToObject和cJSON_CreateString

cJSON_AddRawToObject()

调用cJSON_AddItemToObject和cJSON_CreateRaw

cJSON_SetIntValue()

设置int的值,同时也设置double的值

cJSON_SetNumberValue()

后台会调用cJSON_SetNumberHelper

cJSON_SetNumberHelper()

设置cJSON的number类型的值

cJSON_malloc()

cJSON的malloc函数,调用malloc函数

cJSON_free()

cJSON的free函数,调用free函数

cJSON 一些实现原理cJSON有九种类型

Invalid类型

False类型

True类型

Null类型

Number类型

String类型

Array类型

Object类型

Raw类型

主要使用移位来表示的,同时使用&0xFF来判断类型的

还有两个cJSON_IsReference和cJSON_StringIsConst的宏定义,看名字是判断是否是引用和是否是常量字符串

cJSON最主要的结构体 struct cJSON

已经注释的非常清楚了

总体来说,并列层级的第一个是孩子,其他的都是这个孩子的兄弟的结构。

成员变量

说明

next

同一层级相邻的下一个兄弟

prev

同一层级相邻的上一个兄弟

child

本节点的孩子,只有一个孩子

type

本节点的类型

valuestring

将string类型和raw类型的变量转换成字符串

valueint

将int类型的cjson转换成int类型,已经废弃,为了兼容老版本,可以使用cJSON_SetNumberValue替代赋值

valuedouble

同上,可以代替int类型

string

本节点的名字

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22/* The cJSON structure: */

typedef struct cJSON

{

/* next/prev allow you to walk array/object chains. Alternatively, use GetArraySize/GetArrayItem/GetObjectItem */

struct cJSON *next;

struct cJSON *prev;

/* An array or object item will have a child pointer pointing to a chain of the items in the array/object. */

struct cJSON *child;

/* The type of the item, as above. */

int type;

/* The item's string, if type==cJSON_String and type == cJSON_Raw */

char *valuestring;

/* writing to valueint is DEPRECATED, use cJSON_SetNumberValue instead */

int valueint;

/* The item's number, if type==cJSON_Number */

double valuedouble;

/* The item's name string, if this item is the child of, or is in the list of subitems of an object. */

char *string;

} cJSON;

结构体 struct cJSON_Hooks

定义了两个函数指针,一个malloc和free

不知道怎么用

cJSON_bool 本质就是 int类型

还设置了windows环境下编译的一些参数,看不懂。。

然后还是#define设置了不同情况下给每个函数增加不同的环境设置参数,使用CJSON_PUBLIC包裹

限制了嵌套层数,不能超过1000层

object与array的区别

object是一个key和value对应的键值对,例如 { "key1": "value1", "key2": "value2" }

array是一个数据的概念,数据的集合,例如 [ "value1", "value2" ]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

cjson 判断字段是否纯在_cJSON API 接口使用说明 的相关文章

  • 算法图解 总结

    定义 算法指的是解题方案的准确而完整的描述 是一系列解决问题的清晰指令 算法代表着用系统的方法描述解决问题的策略机制 也就是说 能够对一定规范的输入 在有限时间内获得所要求的输出 如果一个算法有缺陷 或不适合于某个问题 执行这个算法将不会解
  • 怎么使用chatGTP

    ChatGTP是一个开源的即时通讯工具 可以用来在网络上进行实时文本聊天 要使用ChatGTP 您需要完成以下步骤 安装ChatGTP 在网上搜索 ChatGTP 然后在官方网站上下载并安装最新版本的软件 创建帐户 打开ChatGTP 点击
  • 怎么用python编简单游戏大全_适合新手练手的三个python简单小游戏

    学Python之前我们先来几个简单的小游戏练练手 这三个小游戏一个比一个复杂 建议新手慢慢来 1 猜拳 import random 导入随机模块 num 1 yin num 0 shu num 0 while num lt 3 if shu
  • RGMII(介质独立接口) PCB布线设计

    RGMII 介质独立接口 PCB布线设计 本文主要讲解的是RGMII PCB的设计 包括特性和运用的总结 希望大家看了以后能轻松的应对各种RGMII方案的PCB设计 网络设备一定离不开MAC和PHY 有MAC和PHY的地方就有相应的接口 无
  • Dubbo源码分析----过滤器之ActiveLimitFilter

    ActiveLimitFilter也是用来做并发控制的 区别在于ExecuteLimitFilter作用于服务端 而ActiveLimitFilter作用于客户端 看下官网的例子
  • php获取远程文件curl函数的使用

    1 curl函数介绍 curl close 关闭一个curl会话 curl copy handle 复制一个cURL句柄和它的所有选项 curl errno 返回最后一次的错误号 curl error 返回一个保护当前会话最近一次错误的字符
  • 允许asp.net web程序的跨域访问

    什么叫跨域 简单理解就是不同服务器 不同域名之间的访问 如何设置asp net web程序的跨域 在web config中添加如下代码
  • C++中的虚函数和纯虚函数详细讲解

    1 虚函数 1 1 概念 1 定义一个函数为虚函数 不代表函数为不被实现的函数 2 定义他为虚函数是为了允许用基类的指针来调用子类的这个函数 1 2 简介 假设我们有下面的类层次 class A public virtual void fo
  • 用ping让对方电脑堵塞瘫痪

    用ping让对方电脑堵塞瘫痪2008 04 27 11 32 定义echo数据包大小 在默认的情况下windows的ping发送的数据包大小为32byt 我们也可以自己定义它的大小 但有一个大小的限制 就是最大只能发送65500byt 也许
  • Codeforces Round #736 (Div. 2)_A. Gregor and Cryptography

    A Gregor and Cryptography 题目传送门 题目传送门 题面截图 题目大意 给你个质数P 输出 a b a b a b满足 2
  • Talib技术因子详解(四)

    talib安装方式 pip install Ta lib Tushare数据获取请参考 金融量化分析基础环境搭建 数据获取代码请参考 Talib技术因子详解 一 26 MACD 异同移动平均线 调用方式如下 macd macdsignal
  • Swingbench基准测试-4、基准测试报告(results2pdf)

    生成基准测试报告 基准测试完成后 自动将生成测试结果 results xml 该文件需要可使用 results2pdf 将xml结果生成pdf格式 转换过程如下 results2pdf bat c results xml o results
  • C# 迭代器实现枚举器

    在上一篇日志中说的手动实现枚举器来枚举自定义的类型 http blog csdn net weixingstudio article details 6817319 可以看到过程非常复杂 而且容易出错 为了减轻程序员的负担 C 还提供了迭代
  • tp5开发购物商城

    Tp5 1开发购物商城 本人已自学2年 PHP计算数据库中商品总和 非联表查询 1 首先利用client type 注册类型 client id 注册ID 查询出对应的产品订单 2 在common公共文件中 利用对产品表进行查询出相应的价格
  • Qt d指针简单实现及解析

    object h ifndef OBJECT H define OBJECT H define INVOKE METHOD PRIVATE Class Class Private d func return reinterpret cast
  • 虚拟机无法打开“D:\虚拟机\CentOS.vmx”

    虚拟机无法打开 D 虚拟机 CentOS vmx 对于这个问题 解决方法是移管理员身份运行这个VM软件 但是每次都用管理员权限很麻烦 一劳永逸的方法是 1 右击软件打开属性 2 选兼容性那个 3 勾选里面的以管理员身份运行 4 点击确定就可
  • UE4和C++ 开发-Unity 过度到 Unreal 4 对比简化版

    3 两个引擎的部分术语对比 4 7 From GameObjects to Actors 从GameObjects到Actors GameObject在UE4中如何体现 UE4有一个 Gameplay Framework 系统来使用这些Ac
  • 分解质因数模板

    include
  • CTP量化之路一(CTP接口篇)

    随时股票交易越来越顺 条件单系统大大缩减了我看盘的时间 资产越来越多的同时 分散风险也成了个人的需求 因为手时已有成熟的交易策略 自已曾经用的期货账号也还没有被冻结 于是想着拣来做期货自动化 于是自上周向期货公司申请了期货自动化 填写了一堆

随机推荐

  • kubeadm搭建高可用k8s集群

    1 环境准备 hostname IP 组件 m1 192 168 150 140 keepalived haproxy etcd apiserver docker controller manager scheduler m2 192 16
  • 韦东山视频

    第一期 第二期 一期 免费 54节视频 共16 93G 二期 73节视频 每节50分钟总时长3650分钟 共29 6G 掌握写汇编代码的能力 可以分析任意裸板包括U boot 内核里的相关汇编代码 掌握常用的硬件部件的操作 比如GPIO U
  • 【C语言】17-函数-3

    1 链接属性 当组成一个程序的各个源文件分别被编译之后 所有的目标文件以及那些从一个或多个函数库中引用的函数将链接在一起 形成可执行程序 然而 如果相同的标识符出现在几个不同的源文件中时 它们是表示同一个实体 还是表示不同的实体 标识符的链
  • vc不认识 CTreeView

    在VC中调用 CTreeView 方法是 VC会提示error c2504 CTreeView base class undefined CTreeView的基类没有被定义 必须在系统头文件声明处 StdAfx h 加入其头文件 afxcv
  • 把Windows安装到U盘,给Mac电脑用

    启动转换助理是在mac的硬盘分区装win10 mac硬盘金贵呀 以下解决方案把win10安装在u盘 不安装在mac硬盘上 想用的时候插上mac电脑即可 1 把win安装在u盘上 首先在启动转换助理上下载windowssupport文件 具体
  • iOS开发实战之app获取通讯录(iOS 9)

    在做通讯类APP的时候 时常会访问到手机的通讯录 来获取联系人的各种属性 那么本文就来讨论一下怎么获取通讯录 注意 iOS 9 版本上可以行 其他版本未试 第一步 先导入系统库 Contacts framework 然后在 h上导入头文件
  • VGG与风格迁移算法原理

    一 实验介绍 1 1 实验内容 上节课我们学习了卷积神经网络的基本原理 本节实验我们将学习用于图像风格迁移的经典的卷积神经网络模型VGG 并用caffe提供的 draw net py 实现模型的可视化 本节实验我们也将学习图像风格转换的算法
  • 11月22日 EQS优化,让AI知道什么地方不能走,自定义游戏模式,让AI在玩家旁边生成,难度提升,随着时间增多的AI

    EQS优化 让AI知道什么地方不能走 首先进行小修改 创建一个新的AIEQS 新建一个测试pawn 把测试pawn放入场景内 在eqs中放入我们写的eqs任务 使用模拟游戏 就可以直接可视化eqs的选择坐标点 https docs unre
  • JMeter之压力测试——混合场景并发

    在实际的压力测试场景中 有时会遇到多个场景混合并发的情况 这时就需要设置不同的并发比例对不同场景请求数量的控制 下面提供两种方案 一 多线程组方案 1 业务场景设计如下 场景A 场景B 场景C 三个场景按照并发比例要求进行100个用户并发的
  • c语言rand的最大值,[讨论]有关rand()生成数的大小..

    讨论 有关rand 生成数的大小 我想生成 bits的随机数 现在想知道rand 最大能生成多少bits的随机数 搜索更多相关的解决方案 rand 成数 解决方案 当然是32位可以表示的最大数 解决方案 可是经过反复测试 是生成的 位的随机
  • 容器化部署zabbix

    一 创建docker compose yml文件 首先创建一份docker compose yml文件 使用docker compose进行容器的编排 mkdri zabbix 在根目录创建zabbix文件 cd zabbix touch
  • Windows蓝屏代码大全及解决提示

    知识点分析 电脑出现蓝屏现象时 由于导致蓝屏现象的原因较多 建议先通过此款软件进行分析 简单确定蓝屏原因 操作步骤 BlueScreenView不需要任何安装过程或额外的DLL文件 只需运行可执行文件 BlueScreenView exe就
  • Linux下Apache Web服务器的安装与配置

    1 Apache Web服务器简述 Web服务是目前Internet应用最流行 最受欢迎的服务之一 Linux平台使用最广泛的Web服务器是Apache 它是目前性能最优秀 最稳定的Web服务器之一 WWW World Wide Web 服
  • 【Qt】控件探幽——QPushbutton

    注1 本系列文章使用的Qt版本为Qt 6 3 1 注2 本系列文章常规情况下不会直接贴出源码供复制 都以图片形式展示 所有代码 自己动手写一写 记忆更深刻 本文目录 QPushButton探幽 1 clicked bool 信号的参数的含义
  • Spring学习-5-JdbcTemplate数据库操作

    针对数据库的操作 Spring框架提供了JdbcTemplate类 该类是Spring框架数据抽象层的基础 可以说 JdbcTemplate类是Spring JDBC的核心类 在JdbcTemplate核心类中 提供了大量的更新和查询数据库
  • Android面试题之性能优化篇,kotlin版权

    1 如何对 Android 应用进行性能分析 不考虑使用其他第三方性能分析工具的话 我们可以直接使用 ddms 中的工具 其实 ddms 工具已经非常的强大了 ddms 中有 traceview heap allocation tracke
  • Ad15的元器件的3D制作

    1 画元器件的封装 2 在中设置元器件的高度以及浮空高度 颜色 3 然后会出现话网格的箭头 进行绘画 此时已完成3d的绘制 按3试一下效果 4
  • Numpy高级数组索引

    NumPy 高级索引 NumPy 比一般的 Python 序列提供更多的索引方式 除了之前看到的用整数和切片的索引外 数组可以由整数数组索引 布尔索引及花式索引 整数数组索引 对于一个二维数组 要获取数组中 0 0 1 1 和 2 0 位置
  • clusterrole访问权限

    什么是RBAC RBAC全称Role Based Access Control 是Kubernetes集群基于角色的访问控制 实现授权决策 允许通过Kubernetes API动态配置策略 什么是Role Role是一组权限的集合 例如Ro
  • cjson 判断字段是否纯在_cJSON API 接口使用说明

    cJSON API 接口使用说明 cJSON的介绍 cJSON是一个轻量级的JSON解析器使用ANSIC标准 所谓的轻量级 如果你的项目需要使用到解析JSON 那么只需要将cJSON的库中的cJSON h和cJSON c放入到你的项目中适当