ArduinoJSON:序列化和反序列化
顾名思义,ArduinoJSON 库可以帮助你在 Arduino 上处理 JSON 对象。要安装它,请转到库管理器,搜索 ArduinoJSON。安装 Benoit Blanchon 编写的库。

这是文档非常完善的库之一。事实上,它有自己的网站:https://arduinojson.org/。你可以在这个网站上找到许多问题的答案。
在本文中,我们将学习如何使用这个库进行序列化(生成 JSON 文档)和反序列化(解析 JSON 文档)。
序列化
让我们从序列化开始。它非常简单。如果你使用过 Python,这段代码看起来会更加熟悉。
下载 ArduinoJSON 库后,转到 - 文件→示例→ArduinoJSON
对于序列化,我们应该查看的示例是 JsonGeneratorExample。你会注意到代码中有大量注释,建议你仔细阅读这些注释。
没有注释的代码如下所示:
#include <ArduinoJson.h>
void setup() {
Serial.begin(9600);
while (!Serial) continue;
StaticJsonDocument<200> doc;
doc["sensor"] = "gps";
doc["time"] = 1351824120;
JsonArray data = doc.createNestedArray("data");
data.add(48.756080);
data.add(2.302038);
serializeJson(doc, Serial);
Serial.println();
serializeJsonPretty(doc, Serial);
}
void loop() {
}输出
这段代码或多或少是自解释的。串口监视器的输出如下所示:

需要注意几点:
向 JSON 添加键值对的语法是:doc_name[key] = value。JsonArray 类型用于将数组作为任何键的值添加。上面的代码很好地解释了这一点(对于键“data”)。
serializeJSON 接受两个参数:JSON 文档和目标缓冲区。因此,你可以使用以下代码,而不是直接打印到串口:
serializeJson(doc, serializedJSON); Serial.println(serializedJSON);
输出结果将相同。
反序列化
反序列化是序列化的逆过程。你有一个 JSON 文档(它可以来自任何来源,例如串口、Web 服务器等),并且你希望解析它。转到 - 文件 → 示例 → ArduinoJSON 并打开 JsonParserExample。同样,这是一个注释丰富的代码,建议你阅读示例中的注释。
示例
没有注释的代码如下:
#include <ArduinoJson.h>
void setup() {
Serial.begin(9600);
while (!Serial) continue;
StaticJsonDocument<200> doc;
char json[] = "{\"sensor\":\"gps\",\"time\":1351824120,\"data\":[48.756080,2.302038]}";
DeserializationError error = deserializeJson(doc, json);
if (error) {
Serial.print(F("deserializeJson() failed: "));
Serial.println(error.f_str());
return;
}
const char* sensor = doc["sensor"];
long time = doc["time"];
double latitude = doc["data"][0];
double longitude = doc["data"][1];
Serial.println(sensor);
Serial.println(time);
Serial.println(latitude, 6);
Serial.println(longitude, 6);
}
void loop() {
}输出
串口监视器的输出为:

如你所见,反序列化的语法是 deserializeJson(doc, json),如果发生任何错误,它会返回错误。它接受两个参数:用于存储反序列化输出的 JSON 文档和包含 JSON 内容的缓冲区。
获得反序列化内容后,提取内容的语法如下:
data_type var_name = doc[key]
建议你阅读其他 ArduinoJSON 示例。
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP