news 2026/7/7 6:31:10

什么是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/7/7 3:56:57

使用windows记事本打开文件后,程序无法读取文件内容

在使用python读取ini配置文件的过程中&#xff0c;出现了这样的问题。查询得知记事本或者其他软件打开文件后&#xff08;txt或者ini之类的&#xff09;&#xff0c;会在文件首添加一些内容&#xff0c;导致程序打开的时候识别出问题&#xff0c;特别是ini配置文件&#xff0c;…

作者头像 李华
网站建设 2026/7/7 16:02:10

转行网络安全不用愁,从这几个Python小项目开始

转行网络安全不用愁&#xff0c;从这几个Python小项目开始 对于网络安全初学者&#xff0c;实战项目的核心是低门槛、强关联、能落地&#xff0c;优先选能直接用到 Python 基础技能、覆盖核心知识点的小项目&#xff0c;既能巩固技术&#xff0c;又能放进作品集。以下是分阶段…

作者头像 李华
网站建设 2026/7/7 8:42:32

EmotiVoice在智能闹钟中的温柔唤醒体验

EmotiVoice在智能闹钟中的温柔唤醒体验 在清晨的第一缕光中&#xff0c;一个熟悉而温暖的声音轻轻唤你&#xff1a;“宝贝&#xff0c;该起床啦&#xff0c;今天天气真好~”——这不是梦境&#xff0c;而是搭载了EmotiVoice语音合成引擎的智能闹钟正在工作。与传统闹钟刺耳的“…

作者头像 李华
网站建设 2026/7/7 11:43:54

EmotiVoice在在线课程中的教师语气还原

EmotiVoice在在线课程中的教师语气还原 在远程教学日益普及的今天&#xff0c;越来越多的学习者开始质疑&#xff1a;“为什么AI讲的课总像在念说明书&#xff1f;”——声音平直、毫无波澜&#xff0c;重点靠字幕加粗&#xff0c;情绪靠PPT配图。这种“机械朗读”式的语音输出…

作者头像 李华
网站建设 2026/7/7 14:42:13

13、GTK 树形与菜单组件开发指南

GTK 树形与菜单组件开发指南 1. 树形组件(Tree Widget) 在 GTK 中,树形组件是一种强大的工具,用于展示层次结构的数据。下面我们将详细介绍树形组件的相关函数和一个示例代码。 1.1 树形组件相关函数 void gtk_tree_item_expand( GtkTreeItem *tree_item ); :触发树形…

作者头像 李华
网站建设 2026/7/6 22:39:39

18、自定义小部件与简单绘图程序开发

自定义小部件与简单绘图程序开发 1. 自定义Dial小部件及改进方向 在开发自定义小部件时,以Dial小部件为例,其代码约有670行,虽然看起来不少,但已经实现了很多功能,其中很多代码是头文件和样板代码。不过,这个小部件还有一些可以改进的地方: - 减少闪烁问题 :在拖动…

作者头像 李华