news 2026/4/25 9:53:31

什么是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/4/22 20:35:36

Win11 查找并开启 IE 浏览器教程

Win11 正式发布后&#xff0c;不少用户第一时间升级了新系统&#xff0c;却发现找不到熟悉的IE浏览器。其实这是因为微软已在 Win11 中正式移除了的独立前端程序&#xff0c;但它的核心内核仍被系统保留。下面就为大家分享 Win11 开启 IE 浏览器的具体操作步骤&#xff1a; 右…

作者头像 李华
网站建设 2026/4/24 13:11:39

效率翻倍!盘点 15 款我离不开的“神仙软件”,不仅有 AI 神器

有粉丝问我&#xff1a; 你录动图软件用的是啥&#xff1f; 你录视频用啥软件啊&#xff1f; 你的视频剪辑用的什么软件&#xff1f; 你平时写作用啥软件&#xff1f; 我今天盘点一下我日常比较常用的、非常好用的几款软件。 截图 Xnip 传送门&#xff1a;https://zh.x…

作者头像 李华
网站建设 2026/4/25 9:33:16

半导体行业正迈入前所未有的“千兆周期”

本文由半导体产业纵横&#xff08;ID&#xff1a;ICVIEWS&#xff09;编译自tomshardware行业分析认为&#xff0c;人工智能时代正在同时重塑芯片市场的各个方面。人工智能的浪潮正以前所未有的深度和广度重塑全球半导体产业。来自行业巨头与研究机构的一致预测表明&#xff0c…

作者头像 李华
网站建设 2026/4/23 12:42:12

八股文学习日常(虚拟机篇)

1.介绍JVM的内存模型JVM的内存模型共分为五大部分&#xff0c;虚拟机栈&#xff0c;方法栈&#xff0c;堆&#xff0c;元空间和程序计数器&#xff1a;1&#xff09;程序计数器&#xff1a;可看作当前线程执行字节码的行号显示器。用于存储当前线程执行方法的JVM指令地址。当执…

作者头像 李华
网站建设 2026/4/20 15:24:13

EmotiVoice能否生成双语混合语音?中英文夹杂合成实测

EmotiVoice能否生成双语混合语音&#xff1f;中英文夹杂合成实测 在智能语音助手、虚拟偶像和国际化内容创作日益普及的今天&#xff0c;用户早已不满足于“能说话”的TTS系统。他们期待的是更自然、更具表现力的声音——比如在一句中文里流畅插入“Zoom会议”、“deadline”或…

作者头像 李华
网站建设 2026/4/23 3:32:43

EmotiVoice语音合成系统灰度回滚机制设计要点

EmotiVoice语音合成系统灰度回滚机制设计要点 在智能语音助手、虚拟主播和有声内容平台日益普及的今天&#xff0c;用户早已不再满足于“能说话”的机器语音。他们期待的是富有情感、贴近真人表达的声音体验。EmotiVoice 正是在这一背景下脱颖而出的开源TTS引擎——它不仅支持多…

作者头像 李华