JSON的基础知识

news2025/4/3 1:35:58

文章目录

  • 前言
  • 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"
    • 数字(1233.14
    • 布尔值(true/false
    • 对象({ ... }
    • 数组([ ... ]
    • null
  • value可以也是一个 json对象,如上述的{ "key3": value3 }
  • value可以是一个数组,如上述的[value4, value5]
  • 除了最后一个Key-value键值对,其他的键值对都需要在末尾加上一个逗号:,

json协议的一个示例

{
	"key1": "value1",
	"key2": "value2"
}

通过一些在线校验工具,我们可以校验自己编写的json协议报文是否正确。

笔者使用的在线建议工具:bejson.com

请添加图片描述

json 数组类型 的语法规则

  • 语法要求
    最后一个元素后‌不能‌有逗号。
    元素之间必须严格用逗号分隔
  • 元素类型‌:
    支持任意 JSON 数据类型,包括:
    • 字符串("value"
    • 数字(1233.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)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2326147.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

区间预测 | MATLAB实现QRBiGRU门控循环单元分位数回归时间序列区间预测

区间预测 | MATLAB实现QRBiGRU门控循环单元分位数回归时间序列区间预测 目录 区间预测 | MATLAB实现QRBiGRU门控循环单元分位数回归时间序列区间预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 区间预测 | MATLAB实现QRBiGRU门控循环单元分位数回归时间序列区…

11 配置Hadoop集群-免密登录

第一课时 一、复习导入 前面的课程中我们在虚拟机上安装并测试使用了hadoop的示例程序wordcount,并且在准备好了集群的同步工具,那接下来,我们就可去配置hadoop集群了。 二、授新 (一)认识ssh命令 SSH(Secu…

13 配置Hadoop集群-测试使用

第一课时 一、导入 前面的课程我们搭建了hadoop集群,并成功启动了它,接下来我们看看如何去使用集群。 测试的内容包括:1.上传文件,2.下载文件,3.运行程序 二、授新 (一)上传小文件 上传文件的时…

简单ELK框架搭建

简介 ELK 框架是一套开源的日志管理和分析工具,由 Elasticsearch、Logstash 和 Kibana 三个主要组件组成,现在新增了Filebeat组件,可以更高效的收集数据。 Elasticsearch:是一个分布式、高可扩展的开源搜索引擎,能快速…

Vue2和Vue3响应式的基本实现

目录 简介Vue2 响应式Vue2 响应式的局限性 Vue3 响应式Vue3 响应式的优点 Vue2 和 Vue3 响应式对比 简介 在 Vue 框架中,数据的响应式是其核心特性之一。当页面数据发生变化时,我们希望界面能自动更新,而不是手动操作 DOM。这就需要对数据进…

RCE(自增、取反、异或)

自增: 也就是说,a > b,b > c... 所以,我们只要能拿到一个变量,其值为a,通过自增操作即可获得a-z中所有字符。 无字母数字构造: 所有敏感字符串(ASSERT、_POST)通过自增动态生…

【深度学习新浪潮】图像修复(Image Inpainting)技术综述:定义、进展与应用展望

本文为精简版,完整技术细节与参考文献可与作者讨论。 1. 图像修复的定义与核心目标 图像修复(Image Inpainting)是一种通过算法手段填补图像中缺失区域或移除不需要对象的技术,其核心目标是利用图像上下文信息生成与周围像素一致且视觉自然的内容。该技术通过计算机视觉和…

计算机视觉——传统数字图像处理中图像去噪原理与代码实现细节

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也跟随销毁 内部可以定义属性和方法 声明…

山洪预警秒级响应-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模块的地址拼接组成图片路径 当我们用方括号访问元素对象时,…

【最新】探索CFD的未来:从OpenFOAM到深度学习,全面解析计算流体力学的顶级资源与前沿技术

计算流体力学(CFD)作为现代工程与科学研究的核心工具,正以前所未有的速度迈向智能化与多物理场耦合的新时代。本文全面梳理了在线学习CFD的顶级资源,涵盖了从传统数值模拟到深度学习驱动的物理信息模型的广泛领域,旨在为研究者、工程师和学生提供一站式参考指南。内容分为…

算法专题一:双指针算法(下)

书接上回 5.有效三角形个数 力扣&#xff1a; 有效三角形的个数 在做这道题前我们先讲一个数学知识&#xff1a;已知 a < b < c ,此时 ab>c 可以得出 有效三角形。 所以&#xff0c;我们做这道题时&#xff0c;可以不使用暴力算法。 可以优化为先排序&#xff…