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

Arduino中解析JSON数据

JSON

JSON(JavaScript Object Notation,即JavaScript对象表示法)是一种广泛采用的开放标准文件格式与数据交换格式。它兼具人类可读性和机器易解析性,使得数据的编写、阅读、生成及解析都变得十分便捷。JSON的设计不依赖于特定编程语言,得到了众多编程语言的广泛支持,成为数据交换的通用语言。

键值对是JSON格式的核心构成元素,它以一种直观的方式表达了变量与值之间的对应关系。通过键值对,JSON能够清晰地描述数据之间的关联,使得数据的组织和访问变得更加高效和便捷。

在JSON结构中,键必须为字符串类型,且需使用双引号("")进行包裹;而值则可以是多种数据类型,包括字符串、数字、布尔值(true/false)、数组(使用方括号"[]"表示)以及对象(使用花括号"{}"表示)等。键值对之间通过逗号(,)进行分隔,而键与值之间则使用冒号(:)进行连接。整个JSON结构由一对花括号"{}"所包围。

以下是一个JSON数据的示例:

{"switch": true,"mode": "自动","temperature": 25,"windSpeed": 2,"swing": false
}

"temperature": 25是一对键值对。其中,"temperature"为键,25是其对应的值。

Arduino中解析JSON数据

以解析如下JSON数据为例:

 {"switch" : 1,"mode" : "heat","temperature" : 26,"vertical_swing" : 1,"wing_speed" : 3}

安装ArduinoJson库

代码

#include <ArduinoJson.h>void setup() 
{Serial.begin(9600);Serial.println("");// 待解析的json文件String json = "{\"switch\":1, \"mode\":\"heat\",\"temperature\":26,\"vertical_swing\":1,\"wing_speed\":3}";// 创建DynamicJsonDocument对象const size_t capacity = JSON_OBJECT_SIZE(5) + 128 ;   //5表示待解析的JSON对象中有5个数据,128为解析过程中需要的额外空间,可在此网站计算 https://arduinojson.org/v6/assistant/#/step1DynamicJsonDocument doc(capacity);// 反序列化数据deserializeJson(doc, json);// 获取解析后的数据信息bool switch_Bool = doc["switch"].as<bool>();String mode_Str = doc["mode"].as<String>();int temperature_Int = doc["temperature"].as<int>();bool vertical_swing_Bool = doc["vertical_swing"].as<bool>();int wing_speed_Int = doc["wing_speed"].as<int>();// 通过串口监视器输出解析后的数据信息Serial.print("switch_Bool = ");Serial.println(switch_Bool);Serial.print("mode_Str = ");Serial.println(mode_Str);Serial.print("temperature_Int = ");Serial.println(temperature_Int);Serial.print("vertical_swing_Bool = ");Serial.println(vertical_swing_Bool);Serial.print("wing_speed_Int = ");Serial.println(wing_speed_Int);
}void loop() 
{
}

现象

参考

3-4-4-2 ESP8266 JSON解析 – 太极创客

【Arduino】ESP32/ESP8266 JSON格式解析_arduinojson-CSDN博客

http://www.lryc.cn/news/507597.html

相关文章:

  • linux----文件访问(c语言)
  • 源码分析之Openlayers中MousePosition鼠标位置控件
  • 以ATTCK为例构建网络安全知识图
  • myexcel的使用
  • Unity 上好用的插件
  • Vivado - 远程调试 + 远程综合实现 + vmWare网络配置 + NFS 文件共享 + 使用 VIO 核
  • 双臂机器人
  • 【Lua热更新】上篇
  • Ubuntu批量修改文件名
  • 食家巷大烤馍:岁月沉淀下的麦香传奇
  • harmony UI组件学习(1)
  • BTP Integration Suite CPI Apache Camel
  • vitepress-打包SyntaxError: Element is missing end tag.
  • 【从零开始入门unity游戏开发之——C#篇21】C#面向对象的封装——`this`扩展方法、运算符重载、内部类、`partial` 定义分部类
  • Java进程占用的内存有哪些部分?
  • 【华为OD机试真题】【2024年E卷】数值同化-队列BFS(C++/Java/Python)
  • “魔法糖果盒的秘密:用朴素贝叶斯算法猜糖果颜色”
  • linux中docker命令大全
  • Python `str.strip()` 的高级用法详解
  • [蓝桥杯 2019 国 B] 排列数
  • [bug] StarRocks borker load意向之外的bug
  • 2025年前端面试热门题目——HTML|CSS|Javascript|TS知识
  • Linux中部署项目
  • 在 CentOS 上安装 MySQL 8
  • gradle项目下载依赖报错
  • solon 集成 activemq-client (sdk)
  • LRU 缓存
  • 使用ZLMediaKit 开源项目搭建RTSP 服务器
  • 数组晨考2day08
  • 《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》简介