Added JsonDocument::containsKey() (issue #938)

This commit is contained in:
Benoit Blanchon
2019-03-22 08:40:46 +01:00
parent dee8c8e242
commit c8e49a7e4e
4 changed files with 61 additions and 0 deletions

View File

@ -9,6 +9,7 @@ HEAD
- `as<T>()` returns `0` if the integer `T` overflows - `as<T>()` returns `0` if the integer `T` overflows
- `is<T>()` returns `false` if the integer `T` overflows - `is<T>()` returns `false` if the integer `T` overflows
* Added `BasicJsonDocument` to support custom allocator (issue #876) * Added `BasicJsonDocument` to support custom allocator (issue #876)
* Added `JsonDocument::containsKey()` (issue #938)
v6.9.1 (2019-03-01) v6.9.1 (2019-03-01)
------ ------

View File

@ -124,6 +124,21 @@ class JsonDocument : public Visitable {
return getOrAddMember(key).template to<ObjectRef>(); return getOrAddMember(key).template to<ObjectRef>();
} }
// containsKey(char*) const
// containsKey(const char*) const
// containsKey(const __FlashStringHelper*) const
template <typename TChar>
bool containsKey(TChar* key) const {
return as<ObjectRef>().containsKey(key);
}
// containsKey(const std::string&) const
// containsKey(const String&) const
template <typename TString>
bool containsKey(const TString& key) const {
return as<ObjectRef>().containsKey(key);
}
// operator[](const std::string&) // operator[](const std::string&)
// operator[](const String&) // operator[](const String&)
template <typename TString> template <typename TString>

View File

@ -5,6 +5,7 @@
add_executable(JsonDocumentTests add_executable(JsonDocumentTests
add.cpp add.cpp
BasicJsonDocument.cpp BasicJsonDocument.cpp
containsKey.cpp
createNested.cpp createNested.cpp
DynamicJsonDocument.cpp DynamicJsonDocument.cpp
isNull.cpp isNull.cpp

View File

@ -0,0 +1,44 @@
// ArduinoJson - arduinojson.org
// Copyright Benoit Blanchon 2014-2019
// MIT License
#include <ArduinoJson.h>
#include <catch.hpp>
TEST_CASE("JsonDocument::containsKey()") {
DynamicJsonDocument doc(4096);
SECTION("returns true on object") {
doc["hello"] = "world";
REQUIRE(doc.containsKey("hello") == true);
}
SECTION("returns true when value is null") {
doc["hello"] = static_cast<const char*>(0);
REQUIRE(doc.containsKey("hello") == true);
}
SECTION("returns true when key is a std::string") {
doc["hello"] = "world";
REQUIRE(doc.containsKey(std::string("hello")) == true);
}
SECTION("returns false on object") {
doc["world"] = "hello";
REQUIRE(doc.containsKey("hello") == false);
}
SECTION("returns false on array") {
doc.add("hello");
REQUIRE(doc.containsKey("hello") == false);
}
SECTION("returns false on null") {
REQUIRE(doc.containsKey("hello") == false);
}
}