ArduinoJson库 V6版本以及相关函数介绍
ArduinoJson V6版本和V5版本
一.V6版本函数库结构
方法主要分为四大类
- JsonDocument相关,
- JsonObject相关;
- JsonArray相关;
- 解析、构造相关;
二.最重要的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);