ArduinoJson库 V6版本以及相关函数介绍

ArduinoJson库 V6版本以及相关函数介绍

ArduinoJson V6版本和V5版本

一.V6版本函数库结构

  1. ArduinoJson库 V6版本以及相关函数介绍

方法主要分为四大类

  1. JsonDocument相关,
  2. JsonObject相关;
  3. JsonArray相关;
  4. 解析、构造相关;

二.最重要的JSONDOCUMENT

1.两个实现类:

DYNAMICJSONDOCUMENT

DynamicJsonDocument doc(2048); //创建一个DynamicJsonDocument类型的doc对象,大小2048byte

STATICJSONDOCUMENT

StaticJsonDocument<256> doc;

2.使用JSONDOCUMENT

例1: doc 作为JsonObject使用

DynamicJsonDocument doc(1024);
doc["answer"] = 42;
// the doc contains {"answer":42}

例2: doc 作为JsonArray使用

DynamicJsonDocument doc(1024);
doc.add(42);
// the doc contains [42]

3.AS —— 获取顶节点,并把它转成T类型

DynamicJsonBuffer doc(1024);
deserializeJson(doc, "{\"key\":\"value\")");
 
// get the JsonObject in the JsonDocument
JsonObject root = doc.as<JsonObject>();
 
// get the value in the JsonObject
const char* value = root["key"];
  • 此方法不会改变 JsonDocument的内容(JsonDocument::to()会改变)
  • 此方法只会返回JsonDocument顶节点的引用。如果顶节点的类型和强转的T类型不匹配,此方法将会返回空引用

4.TO —— JSONDOCUMENT转成T类型

函数说明:

/**
 * jsondocument转成T类型,T为JsonArray、JsonObject、JsonVariant
 */
JsonArray   to<JsonArray>();
JsonObject  to<JsonObject>();
JsonVariant to<JsonVariant>();

此方法是释放jsondocument的内存空间,也就是说之前已经分配的引用无效,参考代码:

DynamicJsonBuffer doc(1024);
 
JsonObject root1 = doc.to<JsonObject>();
 
JsonObject root2 = doc.to<JsonObject>();
 
// Don't use root1 here, because it's dangling!

5.CLEAR —— 清除JSONDOCUMENT并释放内存空间

清除JsonDocument并释放内存空间

doc.clear();

6. ISNULL —— 判断JSONDOCUMENT是否为空

/**
 * 判断jsondocument是否为空
 */
bool isNull() const;

7. MEMORYUSAGE —— JSONDOCUMENT已使用内存字节数

函数说明:

/**
 * jsondocument已使用内存字节数
 */
size_t memoryUsage() const;

REMOVE —— 移除特定KEY和VALUE

results.remove(0);
  root.remove("results");

三. 解析构造相关

1.DESERIALIZEJSON —— 解析JSON

/**
 * 解析json
 * @param doc jsondocument对象
 * @param input 输入内容
 * @return DeserializationError 解析结果
 */
// writable input => zero-copy
DeserializationError deserializeJson(JsonDocument& doc, char* input);
DeserializationError deserializeJson(JsonDocument& doc, char* input, size_t inputSize);
 
// read-only input => duplication
DeserializationError deserializeJson(JsonDocument& doc, const char* input);
DeserializationError deserializeJson(JsonDocument& doc, const char* input, size_t inputSize);
DeserializationError deserializeJson(JsonDocument& doc, const __FlashStringHelper* input);
DeserializationError deserializeJson(JsonDocument& doc, const __FlashStringHelper* input, size_t inputSize);
DeserializationError deserializeJson(JsonDocument& doc, const String& input);
DeserializationError deserializeJson(JsonDocument& doc, const std::string& input);
DeserializationError deserializeJson(JsonDocument& doc, Stream& input);
DeserializationError deserializeJson(JsonDocument& doc, std::istream& input);

例子:

const char* json = "{\"hello\":\"world\"}";
StaticJsonDocument<200> doc;
deserializeJson(doc, json);
const char* world = doc["hello"];

2. SERIALIZEJSON —— 构造序列化JSON (串口打印JSON)

StaticJsonDocument<200> doc;
doc["hello"] = "world";
serializeJson(doc, Serial);

3. SERIALIZEJSONPRETTY —— 构造序列化JSON,格式化输出 (串口美化打印JSON)

/**
 * 构造序列化json,格式化输出
 * @param doc jsondocument对象
 * @param output 输出内容
 */
size_t serializeJsonPretty(const JsonDocument& doc, char* output, size_t outputSize);
size_t serializeJsonPretty(const JsonDocument& doc, char output[size]);
size_t serializeJsonPretty(const JsonDocument& doc, Print& output);
size_t serializeJsonPretty(const JsonDocument& doc, String& output);
size_t serializeJsonPretty(const JsonDocument& doc, std::string& output);
上一篇:使用ansible批量给新ecs统一添加定时时间同步


下一篇:arch linux 独立显卡问题解决