当前位置: 首页 > news >正文

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"
    • 数字(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)。

相关文章:

  • Java高频面试之并发编程-01
  • SciPy 与 Matlab 数组操作比较
  • 【Golang】泛型与类型约束
  • Spring Boot 自动配置
  • 23--华为交换机端口安全完全指南:从“门禁系统“到“防御堡垒“
  • 第九章 VGA显示矩阵
  • https文件下载异常问题排查
  • OpenCV 从入门到精通(day_02)
  • 中科驭数高性能网卡产品 成就DeepSeek推理模型网络底座
  • 目标检测的训练策略
  • 使用C++实现HTTP服务
  • #Git 变基(Rebase)案例
  • squared = map(lambda x: x ​** 2, nums) 在VScode中报错
  • 背光模组膜材褶皱(膜拱)不良分析案例
  • VUE3+Mapbox-GL 实现鼠标绘制矩形功能的详细代码和讲解
  • 【设计模式】适配器模式
  • 【C++】 —— 笔试刷题day_10
  • 【C#.NET】Web API项目Swagger配置扩展
  • 【嵌入式学习3】多用户多任务服务器实战
  • Upload-labs 靶场搭建 及一句话木马的原理与运用
  • pycharm 做网站哪个好/今日头条关键词排名优化
  • 电脑如何建立网站/南京市网站
  • 农业网站 源码/广告推广语
  • 毕设做网站是不是太low/网站seo诊断分析
  • 中山做网站公司哪家好/西安网站设计
  • 网站后台账户密码/微博指数查询