JSON的基础知识
文章目录
- 前言
- json协议的基本格式
- json 数组类型 的语法规则
- json协议报文的实例
- json常见的一些格式错误
- 在gd32中使用cjson库
- 小结
前言

json协议在互联网应用,物联网应用中都会用到。所谓工欲善其事必先利其器,我们需要学习了解json协议的具体格式,以及在某些场景中如何编写json报文。
最后,我们再学习了解在嵌入式C语言的环境中时常使用的json库-cjson
json协议的基本格式
json协议是使用了 Key-value这种键值对的 形式实现的协议。协议基本结构如下所示。
{"key1": value1,"key2": value2,"nestedObject": {"key3": value3},"array": [value4, value5]
}
注意点:
- 键名(Key):必须用双引号包裹的字符串。
- 值(Value):支持类型包括:
- 字符串(
"value") - 数字(
123、3.14) - 布尔值(
true/false) - 对象(
{ ... }) - 数组(
[ ... ]) null
- 字符串(
- value可以也是一个 json对象,如上述的
{ "key3": value3 } - value可以是一个数组,如上述的
[value4, value5] - 除了最后一个Key-value键值对,其他的键值对都需要在末尾加上一个逗号:
,
json协议的一个示例
{"key1": "value1","key2": "value2"
}
通过一些在线校验工具,我们可以校验自己编写的json协议报文是否正确。
笔者使用的在线建议工具:bejson.com

json 数组类型 的语法规则
- 语法要求
最后一个元素后不能有逗号。
元素之间必须严格用逗号分隔 - 元素类型:
支持任意 JSON 数据类型,包括:- 字符串(
"value") - 数字(
123、3.14) - 布尔值(
true/false) - 对象(
{ ... }) - 数组(
[ ... ]) null
- 字符串(
使用数组的示例
- 使用 简单数据类型 的数组
{"tags": ["news", "technology", "2023"],"scores": [95, 88.5, 72],"flags": [true, false, true]
}
- 使用 json对象类型 的数组
{"users": [{ "id": 1, "name": "Alice" },{ "id": 2, "name": "Bob" }]
}
- 使用 数组类型 的数组 (嵌套数组)
{"matrix": [[1, 2, 3],[4, 5, 6],[7, 8, 9]]
}
- 使用 混合数据类型 的数组(合法但不推荐)
{"mixed_data": ["text",42,{ "key": "value" },[1, 2],null]
}
json协议报文的实例
用于用户注册的HTTP请求体
// HTTP请求体(用户注册)
{"username": "john_doe","email": "john@example.com","age": 28,"is_active": true,"hobbies": ["reading", "coding"]
}// HTTP响应(成功)
{"status": 200,"data": {"user_id": "12345","created_at": "2023-10-05T14:48:00Z"}
}// 错误响应
{"status": 400,"error": {"code": "INVALID_EMAIL","message": "Email format is invalid"}
}
json常见的一些格式错误
- 错误1:末尾多余的逗号
// ❌ 错误
"numbers": [1, 2, 3, ]
// ✅ 正确
"numbers": [1, 2, 3]
- 错误2:缺少引号(字符串元素)
// ❌ 错误
"colors": [red, green, blue]
// ✅ 正确
"colors": ["red", "green", "blue"]
- 错误3:键名未用双引号
// ❌ 错误(键名必须用双引号)
{ key: [1, 2, 3] }
// ✅ 正确
{ "key": [1, 2, 3] }
在gd32中使用cjson库
待续
小结
json的具备的优势如下
- 易读性:结构清晰,易于人类阅读和调试。
- 高效性:体积小,解析速度快(对比XML)。
- 跨平台:所有主流编程语言均提供原生或第三方解析库(如Python的json模块、Java的Jackson,C语言的cjson)。
相关文章:
JSON的基础知识
文章目录 前言json协议的基本格式json 数组类型 的语法规则json协议报文的实例json常见的一些格式错误在gd32中使用cjson库小结 前言 json协议在互联网应用,物联网应用中都会用到。所谓工欲善其事必先利其器,我们需要学习了解json协议的具体格式…...
区间预测 | MATLAB实现QRBiGRU门控循环单元分位数回归时间序列区间预测
区间预测 | MATLAB实现QRBiGRU门控循环单元分位数回归时间序列区间预测 目录 区间预测 | MATLAB实现QRBiGRU门控循环单元分位数回归时间序列区间预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 区间预测 | MATLAB实现QRBiGRU门控循环单元分位数回归时间序列区…...
从研究动机视角对无监督图像去雾论文的分类
对目前拥有(2020年--2024年)的无监督图像去雾论文进行动机分类。总计51篇。 1.数据依赖与配对数据稀缺问题 1.1 论文《DEHAZE-GLCGAN: UNPAIRED SINGLE IMAGE DEHAZING VIA ADVERSARIAL TRAINING》- 2020年 模型的特点如下: 将去雾问题转化…...
11 配置Hadoop集群-免密登录
第一课时 一、复习导入 前面的课程中我们在虚拟机上安装并测试使用了hadoop的示例程序wordcount,并且在准备好了集群的同步工具,那接下来,我们就可去配置hadoop集群了。 二、授新 (一)认识ssh命令 SSH(Secu…...
13 配置Hadoop集群-测试使用
第一课时 一、导入 前面的课程我们搭建了hadoop集群,并成功启动了它,接下来我们看看如何去使用集群。 测试的内容包括:1.上传文件,2.下载文件,3.运行程序 二、授新 (一)上传小文件 上传文件的时…...
Android Product Flavors 深度解析与最佳实践:构建多版本应用的全方位指南
1. 高效配置模板 1.1 现代化多维度配置 (Kotlin DSL) android {flavorDimensions listOf("version", "market", "environment")productFlavors {register("free") {dimension "version"applicationIdSuffix ".free…...
git命令简陋版本
git push git pull 临时仓库暂存区 ##############创建提交################ git init #创建git地址 git config --global user.name "***YQ1007" git config --global user.email "***gmail.com" git remote…...
简单ELK框架搭建
简介 ELK 框架是一套开源的日志管理和分析工具,由 Elasticsearch、Logstash 和 Kibana 三个主要组件组成,现在新增了Filebeat组件,可以更高效的收集数据。 Elasticsearch:是一个分布式、高可扩展的开源搜索引擎,能快速…...
Notepad++正则匹配案例
正则表达式 – 简介 | 菜鸟教程 正则表达式在线测试 | 菜鸟工具 \s 表示空白字符。包括,空格,制表符等 “ ” 只表示空格。 \s 可匹配至少一个空白字符。 [ ] 只表示多个空格。 \d 数字 () 定义变量,括号里的为一个变量,读取变…...
Vue2和Vue3响应式的基本实现
目录 简介Vue2 响应式Vue2 响应式的局限性 Vue3 响应式Vue3 响应式的优点 Vue2 和 Vue3 响应式对比 简介 在 Vue 框架中,数据的响应式是其核心特性之一。当页面数据发生变化时,我们希望界面能自动更新,而不是手动操作 DOM。这就需要对数据进…...
RCE(自增、取反、异或)
自增: 也就是说,a > b,b > c... 所以,我们只要能拿到一个变量,其值为a,通过自增操作即可获得a-z中所有字符。 无字母数字构造: 所有敏感字符串(ASSERT、_POST)通过自增动态生…...
C语言字符串处理相关函数详解
C语言字符串处理相关函数详解 相关函数详解1. **字符串拷贝**:strcpy 和 strncpy 2. **字符串连接**:strcat 和 strncat 3. **字符串比较**:strcmp 和 strncmp 4. **字符串长度**:strlen 5. **字符串查找**:strchr 和 …...
【深度学习新浪潮】图像修复(Image Inpainting)技术综述:定义、进展与应用展望
本文为精简版,完整技术细节与参考文献可与作者讨论。 1. 图像修复的定义与核心目标 图像修复(Image Inpainting)是一种通过算法手段填补图像中缺失区域或移除不需要对象的技术,其核心目标是利用图像上下文信息生成与周围像素一致且视觉自然的内容。该技术通过计算机视觉和…...
贪心算法(14)(java)无重叠区间
题目:给定一个区间的集合 intervals ,其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。 注意 只在一点上接触的区间是 不重叠的。例如 [1, 2] 和 [2, 3] 是不重叠的。 示例 1: 输入: intervals [[…...
Linux编译安装mysql5.7.44 笔记250330
Linux编译安装mysql5.7.44 以下是在Linux系统上通过编译源码安装MySQL 5.7.44的详细步骤: 准备工作 1. 安装依赖库 Debian/Ubuntu # Debian/Ubuntu sudo apt update sudo apt install -y gcc g cmake make libncurses5-dev libssl-dev libboost-dev \bis…...
计算机视觉——传统数字图像处理中图像去噪原理与代码实现细节
1. 概述 在现实世界中捕获的图像常常受到噪声的影响,这些噪声可能来源于环境因素、信号不稳定、相机传感器问题、照明条件差、电损失等多种因素。为了进一步处理这些图像并对结果进行准确解释,拥有尽可能低噪声的图像至关重要。图像去噪是数字图像处理中…...
【STM32】最后一刷-江科大Flash闪存-学习笔记
FLASH简介 STM32F1系列的FLASH包含程序存储器、系统存储器和选项字节三个部分,通过闪存存储器接口(外设)可以对程序存储器和选项字节进行擦除和编程,(系统存储器用于存储原厂写入的BootLoader程序,用于串口…...
JS实现动态点图酷炫效果
实现目标 分析问题 整个图主要是用canvas实现,其中难点是将线的长度控制在一定范围内、并且透明度随长度变化。 前置知识 canvas绘制点、线、三角形、弧形 // 点ctx.moveTo(this.x, this.y);ctx.arc(this.x, this.y, this.r,0, 2 * Math.PI, false);ctx.fillStyle …...
【第十三届“泰迪杯”数据挖掘挑战赛】【2025泰迪杯】【思路篇】A题解题全流程(持续更新)
【第十三届“泰迪杯”数据挖掘挑战赛】【2025泰迪杯】A题解题全流程-思路(持续更新) 写在前面: 1、A题、C题将会持续更新,陆续更新发布文章 2、赛题交流咨询Q群:1037590285 3、全家桶依旧包含: 代码、…...
爱普生晶体单元FC2012AN在5G RedCap中的应用
在 5G 技术向物联网领域深度渗透的今天,RedCap(5G 轻量化)作为衔接中高速物联网场景的关键技术,正加速推动工业、医疗、可穿戴等领域的智能化升级。爱普生 FC2012AN 低 ESR 晶体单元凭借其突破性的小尺寸、低功耗与高稳定性设计&a…...
vue 两种路由模式
一、两种模式比较 在vue.js中,路由模式分为两种:hash 模式和 history 模式。这两种模式决定了URL的结构和浏览器历史记录的管理方式。 1. hash 模式带 #,#后面的地址变化不会引起页面的刷新。换句话说,hash模式不会将#后面的地址…...
Java-servlet(十)使用过滤器,请求调度程序和Servlet线程(附带图谱表格更好对比理解)
Java-servlet(十)使用过滤器,请求调度程序和Servlet线程 前言一、Servlet 间通信(了解即可)二、Servlet 请求处理:getAttribute 和 getParameter 的区别与应用1.getAttribute 方法2.getParameter 方法 三、…...
ue5 学习笔记 FPS游戏制作35 GameMode与GameInstance
文章目录 相似GameMode介绍声明设置生效调用 GameInstance介绍声明设置生效调用 相似 两者都用来保存公共的数据和方法 数据都在内存里,关闭程序后数据消失 GameMode 介绍 生命周期跟随关卡,关卡销毁GameMode也跟随销毁 内部可以定义属性和方法 声明…...
rocky9.4 升级SSH 9.9p2
echo "##################################开始升级Openssh##################################################################################" ##ssh变量---------------------------------------- sshnumber9.9p2 sshnumber1ssh -V 2>&1 | cut -d, -f…...
基于WebSocket的金融数据实时推送系统架构设计对接多国金融数据API
基于WebSocket的金融数据实时推送系统架构设计 ——高可用、低延迟与全球化数据支持的技术实践 一、实时数据推送的技术演进 在证券交易、外汇监控、量化策略等场景中,毫秒级延迟可能带来完全不同的业务结果。早期基于HTTP轮询的方案存在三大核心问题:…...
山洪预警秒级响应-AI本地化部署在极端降雨短临预测中的技术突破。AI智能体开发与大语言模型的本地化部署、优化技术
极端降雨预测的技术痛点与边缘破局 1. 传统预警系统的三重瓶颈 延迟致命:WRF模式在1km分辨率下3小时预报耗时>45分钟,错过山洪黄金响应期 地形干扰大:复杂地形区(如横断山脉)降水预测误差超50% 数…...
矿山自动化监测解决方案
1.行业现状 为贯彻落实《中共中央国务院关于推进安全生产领域改革发展的意见》《“十四五”矿山安全生产规划》(应急〔2022〕64号)、《国务院安委会办公室关于加强矿山安全生产工作的紧急通知》(安委办〔2021〕3号)等有关工作部署…...
pytorch学习(b站小土堆学习)
1 环境配置 参考链接 2. dir 和 help函数 dir():用于查看某一模块函数的方法 help(): 用于查看某方法的使用方法 3. dataset类实战 利用Image对象打开图片,利用os模块的地址拼接组成图片路径 当我们用方括号访问元素对象时,…...
微信小程序:解决tabbar切换时,页面不刷新问题
在微信小程序中,默认情况下切换 tabBar 页面时,页面不会重新加载或刷新(而是保持之前的状态)。如果你需要在切换 tabBar 时触发数据刷新或重新执行某些逻辑,可以通过以下方法解决: 方法 1:…...
【最新】探索CFD的未来:从OpenFOAM到深度学习,全面解析计算流体力学的顶级资源与前沿技术
计算流体力学(CFD)作为现代工程与科学研究的核心工具,正以前所未有的速度迈向智能化与多物理场耦合的新时代。本文全面梳理了在线学习CFD的顶级资源,涵盖了从传统数值模拟到深度学习驱动的物理信息模型的广泛领域,旨在为研究者、工程师和学生提供一站式参考指南。内容分为…...
