Esp8266(NodeMCU)ArduinoJson进行Json序列化和反序列化,收到服务器数据处理


  ArduinoJson(全称:ArduinoJson-C++ JSON Library for IoT) 是嵌入式系统中优雅和高效的Json库。它仅使用最基本的API,确保工作时消耗最小的内存空间。虽然它的命名中包含“Arduino”,但事实上并没有引用Arduino的任何库文件。ArduinoJson基于MIT开源协议,也就是说它是免费的,因此可以应用在任何的C++项目中。

  序列化是将对象状态转换为可保持或可传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。序列化与反序列化,在Esp8266中使用就是在连接到服务器之后,收发数据的处理。

官方实例代码

前提是需要在Arduino编译器里面下载安装ArduinoJson库文件。
在这里插入图片描述

#include <ArduinoJson.h>

void setup() {

  Serial.begin(9600);
    
  DynamicJsonDocument doc(1024);
 
  // WARNING: the string in the input  will be duplicated in the JsonDocument.
  String input = "{\"sensor\":\"gps\",\"time\":1351824120,\"data\":[48.756080,2.302038]}";
  deserializeJson(doc, input);
  JsonObject obj = doc.as<JsonObject>();

  // You can use a String to get an element of a JsonObject
  // No duplication is done.
  //反序列化
  long time = obj[String("time")];
  String sensor = obj["sensor"];
  double latitude = doc["data"][0];
  double longitude = doc["data"][1];

  // Print values.
  Serial.println(sensor);
  Serial.println(time);
  Serial.println(latitude, 6);
  Serial.println(longitude, 6);

  //序列化
  obj["sensor"] = "new gps";
  obj["code"] = 200;
  // Lastly, you can print the resulting JSON to a String
  String output;
  serializeJson(doc, output);

  Serial.println(output);
}

void loop() {
  // not used in this example
}

结果:
在这里插入图片描述

deserializeJson(doc, input),反序列化,将object 对象转换成 string。 serializeJson(doc, output),内容序列化为json格式字符串,以便于传输。
DynamicJsonDocument doc(1024);
JsonObject obj = doc.as();
创建了一个动态json,设置属性。

实例ESP8266使用ArduinoJson

  自己使用Esp8266处理服务器收到数据代码,可以看我下一篇博客,关于Esp8266连接阿里云服务器。
在这里插入图片描述

官方地址

更多ArduinoJson库的相关资料请在官网查看。https://arduinojson.org/

在这里插入图片描述
  ArduinoJson Assistant可以帮助自动计算Size大小。

猜你喜欢

转载自blog.csdn.net/weixin_45488643/article/details/106818579