news 2026/2/22 18:22:15

什么是json?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
什么是json?


JSON (JavaScript Object Notation)​ 是一种轻量级的数据交换格式,易于人阅读和编写,也易于机器解析和生成。

JSON 的基本数据类型

类型

描述

示例

对象

无序的键值对集合

{"name": "John", "age": 30}

数组

有序的值列表

["apple", "banana", "orange"]

字符串

双引号包围的文本

"hello world"

数字

整数或浮点数

42,3.14

布尔值

true 或 false

true,false

null

空值

null

JSON 语法规则

  • 数据以键值对形式存在

  • 键必须是字符串(双引号)

  • 值可以是任意JSON数据类型

  • 对象用{}包围,数组用[]包围

  • 数据之间用逗号分隔

例如:

{ "name": "Alice", "age": 25, "is_student": false, "courses": ["Math", "Science", "History"], "address": { "street": "123 Main St", "city": "New York" }, "scores": null }

根据语法规则我们可以知道,"courses"对应的就是一个数组,"address"对应的就是一个对象...


我们在项目中手动建立一个json数据或者是解析json数据,当然也是有工具可以使用的,比如:cJSON库

1. cJSON 简介

cJSON​ 是一个超轻量级的JSON解析器和生成器,用C语言编写,只有单个源文件和头文件,易于集成到项目中。

2.cJSON 的主要函数

创建和删除函数
cJSON 的主要函数 创建和删除函数 // 创建JSON对象 cJSON *cJSON_CreateObject(void); // 创建JSON数组 cJSON *cJSON_CreateArray(void); // 创建字符串 cJSON *cJSON_CreateString(const char *string); // 创建数字 cJSON *cJSON_CreateNumber(double num); // 创建布尔值 cJSON *cJSON_CreateTrue(void); cJSON *cJSON_CreateFalse(void); cJSON *cJSON_CreateBool(int boolean); // 创建null cJSON *cJSON_CreateNull(void); // 删除JSON对象 void cJSON_Delete(cJSON *item);
示例1:创建JSON对象
示例1:创建JSON对象 #include <stdio.h> #include "cJSON.h" int main() { // 创建根对象 cJSON *root = cJSON_CreateObject(); // 添加基本字段 cJSON_AddStringToObject(root, "name", "John Doe"); cJSON_AddNumberToObject(root, "age", 30); cJSON_AddBoolToObject(root, "is_student", 0); // 0=false, 1=true // 创建并添加数组 cJSON *hobbies = cJSON_CreateArray(); cJSON_AddItemToArray(hobbies, cJSON_CreateString("reading")); cJSON_AddItemToArray(hobbies, cJSON_CreateString("gaming")); cJSON_AddItemToArray(hobbies, cJSON_CreateString("coding")); cJSON_AddItemToObject(root, "hobbies", hobbies); // 创建并添加嵌套对象 cJSON *address = cJSON_CreateObject(); cJSON_AddStringToObject(address, "street", "123 Main St"); cJSON_AddStringToObject(address, "city", "Boston"); cJSON_AddStringToObject(address, "zipcode", "02101"); cJSON_AddItemToObject(root, "address", address); // 转换为字符串并打印 char *json_string = cJSON_Print(root); printf("Created JSON:\n%s\n", json_string); // 清理内存 free(json_string); cJSON_Delete(root); return 0; } 输出: { "name": "John Doe", "age": 30, "is_student": false, "hobbies": ["reading", "gaming", "coding"], "address": { "street": "123 Main St", "city": "Boston", "zipcode": "02101" } }
数组操作函数 数组访问 // 获取数组大小 int cJSON_GetArraySize(const cJSON *array); // 根据索引获取数组项目 cJSON *cJSON_GetArrayItem(const cJSON *array, int index);
对象访问函数 获取对象成员 // 根据键名获取对象中的项目 cJSON *cJSON_GetObjectItem(const cJSON *object, const char *string); // 根据键名获取对象中的项目(大小写不敏感) cJSON *cJSON_GetObjectItemCaseSensitive(const cJSON *object, const char *string); 安全获取函数(推荐) // 安全地获取对象项目并检查存在性 cJSON *cJSON_GetObjectItemSafe(const cJSON *object, const char *string); // 检查对象是否包含某个键 int cJSON_HasObjectItem(const cJSON *object, const char *string); 3. 类型检查函数 基本类型检查 // 检查是否为对象 int cJSON_IsObject(const cJSON *item); // 检查是否为数组 int cJSON_IsArray(const cJSON *item); // 检查是否为字符串 int cJSON_IsString(const cJSON *item); // 检查是否为数字 int cJSON_IsNumber(const cJSON *item); // 检查是否为布尔值 int cJSON_IsBool(const cJSON *item); // 检查是否为true int cJSON_IsTrue(const cJSON *item); // 检查是否为false int cJSON_IsFalse(const cJSON *item); // 检查是否为null int cJSON_IsNull(const cJSON *item); 复合类型检查 // 检查是否为原始类型(字符串、数字、布尔、null) int cJSON_IsRaw(const cJSON *item); // 检查是否为引用 int cJSON_IsReference(const cJSON *item); 4. 值获取函数 从已知类型获取值 // 从字符串项目获取字符串值 const char *cJSON_GetStringValue(const cJSON *item); // 从数字项目获取整数值 int cJSON_GetNumberValue(const cJSON *item); // 从数字项目获取双精度值 double cJSON_GetNumberDoubleValue(const cJSON *item);
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/15 15:25:13

拿到Photoshop的源码了,发现两个意想不到的秘密......

今天看到了Photoshop1.0的源码&#xff0c;有两个想不到&#xff1a;1. 竟然没有用C语言&#xff0c;而是PASCAL。2. 代码中几乎没啥注释。仅有的一点儿注释也都是汇编相关的&#xff0c;不过没有注释根本不是问题&#xff0c;因为代码写得太清晰易懂了&#xff0c;添加注释反而…

作者头像 李华
网站建设 2026/2/15 7:35:17

SQL常用语法全解析:从入门到进阶的实战指南

SQL&#xff08;Structured Query Language&#xff0c;结构化查询语言&#xff09;是操作关系型数据库的核心工具&#xff0c;无论是后端开发、数据分析、运维监控&#xff0c;还是大数据处理&#xff0c;SQL都是不可或缺的技能。从简单的“查询数据”到复杂的“多表关联分析”…

作者头像 李华
网站建设 2026/2/22 14:14:00

基于SSM的社区外来务工人员管理系统【2026最新】

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

作者头像 李华
网站建设 2026/2/20 6:37:31

业务总在“催合同”?不是他们急,是系统没跟上!

“合同不是流程的终点&#xff0c;而是业务执行的起点。” —— Gartner《2024 CLM 市场指南》但在现实中&#xff0c;许多企业的合同管理却让业务团队苦不堪言&#xff1a; 起草靠微信传 Word&#xff0c;审批靠私聊催领导&#xff0c;签完合同就“失联”…… 不是业务不懂规矩…

作者头像 李华
网站建设 2026/2/20 6:37:29

7、GTK 杂项小部件全解析

GTK 杂项小部件全解析 1. 状态栏(Statusbars) 状态栏是一种简单的小部件,用于显示文本消息。它会维护一个消息栈,当弹出当前消息时,会重新显示上一条文本消息。为了让应用程序的不同部分使用同一个状态栏显示消息,状态栏小部件会分配上下文标识符(Context Identifiers…

作者头像 李华
网站建设 2026/2/22 4:35:58

基于SpringBoot的宠物医院管理系统(毕业设计项目源码+文档)

课题摘要在宠物医疗行业规范化、精细化运营需求升级的背景下&#xff0c;传统宠物医院管理存在 “病历零散、诊疗流程混乱、收费核算低效” 的痛点&#xff0c;基于 SpringBoot 构建的宠物医院管理系统&#xff0c;适配中小型宠物医院、连锁宠物诊疗机构场景&#xff0c;实现诊…

作者头像 李华