From d92eee87363a908dcc8c921bfe39fec2500e5496 Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Fri, 6 Sep 2024 17:32:09 +0200 Subject: [PATCH] Deprecate `containsKey()` in favor of `doc["key"].is()` See #2121 --- CHANGELOG.md | 20 ++ extras/tests/Deprecated/CMakeLists.txt | 3 +- extras/tests/Deprecated/containsKey.cpp | 210 ++++++++++++++++++ extras/tests/JsonDocument/CMakeLists.txt | 1 - extras/tests/JsonDocument/MemberProxy.cpp | 19 -- extras/tests/JsonDocument/containsKey.cpp | 54 ----- extras/tests/JsonObject/CMakeLists.txt | 1 - extras/tests/JsonObject/containsKey.cpp | 39 ---- extras/tests/JsonObject/std_string.cpp | 7 - extras/tests/JsonObjectConst/CMakeLists.txt | 1 - extras/tests/JsonObjectConst/containsKey.cpp | 40 ---- extras/tests/JsonVariant/CMakeLists.txt | 1 - extras/tests/JsonVariant/containsKey.cpp | 36 --- extras/tests/JsonVariant/unbound.cpp | 4 - extras/tests/JsonVariantConst/CMakeLists.txt | 1 - extras/tests/JsonVariantConst/containsKey.cpp | 41 ---- extras/tests/Misc/unsigned_char.cpp | 9 - src/ArduinoJson/Document/JsonDocument.hpp | 9 +- src/ArduinoJson/Object/JsonObject.hpp | 9 +- src/ArduinoJson/Object/JsonObjectConst.hpp | 9 +- src/ArduinoJson/Variant/JsonVariantConst.hpp | 9 +- src/ArduinoJson/Variant/VariantRefBase.hpp | 9 +- 22 files changed, 263 insertions(+), 269 deletions(-) create mode 100644 extras/tests/Deprecated/containsKey.cpp delete mode 100644 extras/tests/JsonDocument/containsKey.cpp delete mode 100644 extras/tests/JsonObject/containsKey.cpp delete mode 100644 extras/tests/JsonObjectConst/containsKey.cpp delete mode 100644 extras/tests/JsonVariant/containsKey.cpp delete mode 100644 extras/tests/JsonVariantConst/containsKey.cpp diff --git a/CHANGELOG.md b/CHANGELOG.md index 22338948..48347bc5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ HEAD * Reduce the slot size (see table below) * Improve message when user forgets third arg of `serializeJson()` et al. * Set `ARDUINOJSON_USE_DOUBLE` to `0` by default on 8-bit architectures +* Deprecate `containsKey()` in favor of `doc["key"].is()` | Architecture | before | after | |--------------|----------|----------| @@ -16,6 +17,25 @@ HEAD | 32-bit | 16 bytes | 8 bytes | | 64-bit | 24 bytes | 16 bytes | +> ### BREAKING CHANGES +> +> After being on the death row for years, the `containsKey()` method has finally been deprecated. +> You should replace `doc.containsKey("key")` with `doc["key"].is()`, which not only checks that the key exists but also that the value is of the expected type. +> +> ```cpp +> // Before +> if (doc.containsKey("value")) { +> int value = doc["value"]; +> // ... +> } +> +> // After +> if (doc["value"].is()) { +> int value = doc["value"]; +> // ... +> } +> ``` + v7.1.0 (2024-06-27) ------ diff --git a/extras/tests/Deprecated/CMakeLists.txt b/extras/tests/Deprecated/CMakeLists.txt index 9cefe82c..c69fc449 100644 --- a/extras/tests/Deprecated/CMakeLists.txt +++ b/extras/tests/Deprecated/CMakeLists.txt @@ -16,9 +16,10 @@ endif() add_executable(DeprecatedTests add.cpp + BasicJsonDocument.cpp + containsKey.cpp createNestedArray.cpp createNestedObject.cpp - BasicJsonDocument.cpp DynamicJsonDocument.cpp macros.cpp memoryUsage.cpp diff --git a/extras/tests/Deprecated/containsKey.cpp b/extras/tests/Deprecated/containsKey.cpp new file mode 100644 index 00000000..3a429de5 --- /dev/null +++ b/extras/tests/Deprecated/containsKey.cpp @@ -0,0 +1,210 @@ +// ArduinoJson - https://arduinojson.org +// Copyright © 2014-2024, Benoit BLANCHON +// MIT License + +#include +#include + +#include "Literals.hpp" + +TEST_CASE("JsonDocument::containsKey()") { + JsonDocument doc; + + SECTION("returns true on object") { + doc["hello"] = "world"; + + REQUIRE(doc.containsKey("hello") == true); + } + + SECTION("returns true when value is null") { + doc["hello"] = static_cast(0); + + REQUIRE(doc.containsKey("hello") == true); + } + + SECTION("returns true when key is a std::string") { + doc["hello"] = "world"; + + REQUIRE(doc.containsKey("hello"_s) == 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); + } + + SECTION("support JsonVariant") { + doc["hello"] = "world"; + doc["key"] = "hello"; + + REQUIRE(doc.containsKey(doc["key"]) == true); + REQUIRE(doc.containsKey(doc["foo"]) == false); + } +} + +TEST_CASE("MemberProxy::containsKey()") { + JsonDocument doc; + auto mp = doc["hello"]; + + SECTION("containsKey(const char*)") { + mp["key"] = "value"; + + REQUIRE(mp.containsKey("key") == true); + REQUIRE(mp.containsKey("key") == true); + } + + SECTION("containsKey(std::string)") { + mp["key"] = "value"; + + REQUIRE(mp.containsKey("key"_s) == true); + REQUIRE(mp.containsKey("key"_s) == true); + } +} + +TEST_CASE("JsonObject::containsKey()") { + JsonDocument doc; + JsonObject obj = doc.to(); + obj["hello"] = 42; + + SECTION("returns true only if key is present") { + REQUIRE(false == obj.containsKey("world")); + REQUIRE(true == obj.containsKey("hello")); + } + + SECTION("returns false after remove()") { + obj.remove("hello"); + + REQUIRE(false == obj.containsKey("hello")); + } + +#ifdef HAS_VARIABLE_LENGTH_ARRAY + SECTION("key is a VLA") { + size_t i = 16; + char vla[i]; + strcpy(vla, "hello"); + + REQUIRE(true == obj.containsKey(vla)); + } +#endif + + SECTION("key is a JsonVariant") { + doc["key"] = "hello"; + REQUIRE(true == obj.containsKey(obj["key"])); + REQUIRE(false == obj.containsKey(obj["hello"])); + } + + SECTION("std::string") { + REQUIRE(true == obj.containsKey("hello"_s)); + } + + SECTION("unsigned char[]") { + unsigned char key[] = "hello"; + REQUIRE(true == obj.containsKey(key)); + } +} + +TEST_CASE("JsonObjectConst::containsKey()") { + JsonDocument doc; + doc["hello"] = 42; + auto obj = doc.as(); + + SECTION("supports const char*") { + REQUIRE(false == obj.containsKey("world")); + REQUIRE(true == obj.containsKey("hello")); + } + + SECTION("supports std::string") { + REQUIRE(false == obj.containsKey("world"_s)); + REQUIRE(true == obj.containsKey("hello"_s)); + } + +#ifdef HAS_VARIABLE_LENGTH_ARRAY + SECTION("supports VLA") { + size_t i = 16; + char vla[i]; + strcpy(vla, "hello"); + + REQUIRE(true == obj.containsKey(vla)); + } +#endif + + SECTION("supports JsonVariant") { + doc["key"] = "hello"; + REQUIRE(true == obj.containsKey(obj["key"])); + REQUIRE(false == obj.containsKey(obj["hello"])); + } +} + +TEST_CASE("JsonVariant::containsKey()") { + JsonDocument doc; + JsonVariant var = doc.to(); + + SECTION("returns false is unbound") { + CHECK_FALSE(JsonVariant().containsKey("hello")); + } + + SECTION("containsKey(const char*)") { + var["hello"] = "world"; + + REQUIRE(var.containsKey("hello") == true); + REQUIRE(var.containsKey("world") == false); + } + + SECTION("containsKey(std::string)") { + var["hello"] = "world"; + + REQUIRE(var.containsKey("hello"_s) == true); + REQUIRE(var.containsKey("world"_s) == false); + } + + SECTION("containsKey(JsonVariant)") { + var["hello"] = "world"; + var["key"] = "hello"; + + REQUIRE(var.containsKey(doc["key"]) == true); + REQUIRE(var.containsKey(doc["foo"]) == false); + } +} + +TEST_CASE("JsonVariantConst::containsKey()") { + JsonDocument doc; + doc["hello"] = "world"; + JsonVariantConst var = doc.as(); + + SECTION("support const char*") { + REQUIRE(var.containsKey("hello") == true); + REQUIRE(var.containsKey("world") == false); + } + + SECTION("support std::string") { + REQUIRE(var.containsKey("hello"_s) == true); + REQUIRE(var.containsKey("world"_s) == false); + } + +#ifdef HAS_VARIABLE_LENGTH_ARRAY + SECTION("supports VLA") { + size_t i = 16; + char vla[i]; + strcpy(vla, "hello"); + + REQUIRE(true == var.containsKey(vla)); + } +#endif + + SECTION("support JsonVariant") { + doc["key"] = "hello"; + REQUIRE(var.containsKey(var["key"]) == true); + REQUIRE(var.containsKey(var["foo"]) == false); + } +} diff --git a/extras/tests/JsonDocument/CMakeLists.txt b/extras/tests/JsonDocument/CMakeLists.txt index e6b6f1db..0caa7b9e 100644 --- a/extras/tests/JsonDocument/CMakeLists.txt +++ b/extras/tests/JsonDocument/CMakeLists.txt @@ -9,7 +9,6 @@ add_executable(JsonDocumentTests clear.cpp compare.cpp constructor.cpp - containsKey.cpp ElementProxy.cpp isNull.cpp issue1120.cpp diff --git a/extras/tests/JsonDocument/MemberProxy.cpp b/extras/tests/JsonDocument/MemberProxy.cpp index dc00e4db..b48eda1f 100644 --- a/extras/tests/JsonDocument/MemberProxy.cpp +++ b/extras/tests/JsonDocument/MemberProxy.cpp @@ -93,25 +93,6 @@ TEST_CASE("MemberProxy::operator==()") { } } -TEST_CASE("MemberProxy::containsKey()") { - JsonDocument doc; - MemberProxy mp = doc["hello"]; - - SECTION("containsKey(const char*)") { - mp["key"] = "value"; - - REQUIRE(mp.containsKey("key") == true); - REQUIRE(mp.containsKey("key") == true); - } - - SECTION("containsKey(std::string)") { - mp["key"] = "value"; - - REQUIRE(mp.containsKey("key"_s) == true); - REQUIRE(mp.containsKey("key"_s) == true); - } -} - TEST_CASE("MemberProxy::operator|()") { JsonDocument doc; diff --git a/extras/tests/JsonDocument/containsKey.cpp b/extras/tests/JsonDocument/containsKey.cpp deleted file mode 100644 index a68236e3..00000000 --- a/extras/tests/JsonDocument/containsKey.cpp +++ /dev/null @@ -1,54 +0,0 @@ -// ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON -// MIT License - -#include -#include - -#include "Literals.hpp" - -TEST_CASE("JsonDocument::containsKey()") { - JsonDocument doc; - - SECTION("returns true on object") { - doc["hello"] = "world"; - - REQUIRE(doc.containsKey("hello") == true); - } - - SECTION("returns true when value is null") { - doc["hello"] = static_cast(0); - - REQUIRE(doc.containsKey("hello") == true); - } - - SECTION("returns true when key is a std::string") { - doc["hello"] = "world"; - - REQUIRE(doc.containsKey("hello"_s) == 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); - } - - SECTION("support JsonVariant") { - doc["hello"] = "world"; - doc["key"] = "hello"; - - REQUIRE(doc.containsKey(doc["key"]) == true); - REQUIRE(doc.containsKey(doc["foo"]) == false); - } -} diff --git a/extras/tests/JsonObject/CMakeLists.txt b/extras/tests/JsonObject/CMakeLists.txt index dd2dfaa6..60ba1fe1 100644 --- a/extras/tests/JsonObject/CMakeLists.txt +++ b/extras/tests/JsonObject/CMakeLists.txt @@ -5,7 +5,6 @@ add_executable(JsonObjectTests clear.cpp compare.cpp - containsKey.cpp equals.cpp isNull.cpp iterator.cpp diff --git a/extras/tests/JsonObject/containsKey.cpp b/extras/tests/JsonObject/containsKey.cpp deleted file mode 100644 index d7dd8d1e..00000000 --- a/extras/tests/JsonObject/containsKey.cpp +++ /dev/null @@ -1,39 +0,0 @@ -// ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON -// MIT License - -#include -#include - -TEST_CASE("JsonObject::containsKey()") { - JsonDocument doc; - JsonObject obj = doc.to(); - obj["hello"] = 42; - - SECTION("returns true only if key is present") { - REQUIRE(false == obj.containsKey("world")); - REQUIRE(true == obj.containsKey("hello")); - } - - SECTION("returns false after remove()") { - obj.remove("hello"); - - REQUIRE(false == obj.containsKey("hello")); - } - -#ifdef HAS_VARIABLE_LENGTH_ARRAY - SECTION("key is a VLA") { - size_t i = 16; - char vla[i]; - strcpy(vla, "hello"); - - REQUIRE(true == obj.containsKey(vla)); - } -#endif - - SECTION("key is a JsonVariant") { - doc["key"] = "hello"; - REQUIRE(true == obj.containsKey(obj["key"])); - REQUIRE(false == obj.containsKey(obj["hello"])); - } -} diff --git a/extras/tests/JsonObject/std_string.cpp b/extras/tests/JsonObject/std_string.cpp index 613e0bdc..85ca3005 100644 --- a/extras/tests/JsonObject/std_string.cpp +++ b/extras/tests/JsonObject/std_string.cpp @@ -34,13 +34,6 @@ TEST_CASE("std::string") { REQUIRE("value"_s == obj["key"_s]); } - SECTION("containsKey()") { - char json[] = "{\"key\":\"value\"}"; - deserializeJson(doc, json); - JsonObject obj = doc.as(); - REQUIRE(true == obj.containsKey("key"_s)); - } - SECTION("remove()") { JsonObject obj = doc.to(); obj["key"] = "value"; diff --git a/extras/tests/JsonObjectConst/CMakeLists.txt b/extras/tests/JsonObjectConst/CMakeLists.txt index dadb910e..447e2395 100644 --- a/extras/tests/JsonObjectConst/CMakeLists.txt +++ b/extras/tests/JsonObjectConst/CMakeLists.txt @@ -3,7 +3,6 @@ # MIT License add_executable(JsonObjectConstTests - containsKey.cpp equals.cpp isNull.cpp iterator.cpp diff --git a/extras/tests/JsonObjectConst/containsKey.cpp b/extras/tests/JsonObjectConst/containsKey.cpp deleted file mode 100644 index 3283c08d..00000000 --- a/extras/tests/JsonObjectConst/containsKey.cpp +++ /dev/null @@ -1,40 +0,0 @@ -// ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON -// MIT License - -#include -#include - -#include "Literals.hpp" - -TEST_CASE("JsonObjectConst::containsKey()") { - JsonDocument doc; - doc["hello"] = 42; - auto obj = doc.as(); - - SECTION("supports const char*") { - REQUIRE(false == obj.containsKey("world")); - REQUIRE(true == obj.containsKey("hello")); - } - - SECTION("supports std::string") { - REQUIRE(false == obj.containsKey("world"_s)); - REQUIRE(true == obj.containsKey("hello"_s)); - } - -#ifdef HAS_VARIABLE_LENGTH_ARRAY - SECTION("supports VLA") { - size_t i = 16; - char vla[i]; - strcpy(vla, "hello"); - - REQUIRE(true == obj.containsKey(vla)); - } -#endif - - SECTION("supports JsonVariant") { - doc["key"] = "hello"; - REQUIRE(true == obj.containsKey(obj["key"])); - REQUIRE(false == obj.containsKey(obj["hello"])); - } -} diff --git a/extras/tests/JsonVariant/CMakeLists.txt b/extras/tests/JsonVariant/CMakeLists.txt index e14e5481..282e6cee 100644 --- a/extras/tests/JsonVariant/CMakeLists.txt +++ b/extras/tests/JsonVariant/CMakeLists.txt @@ -7,7 +7,6 @@ add_executable(JsonVariantTests as.cpp clear.cpp compare.cpp - containsKey.cpp converters.cpp copy.cpp is.cpp diff --git a/extras/tests/JsonVariant/containsKey.cpp b/extras/tests/JsonVariant/containsKey.cpp deleted file mode 100644 index a406fe14..00000000 --- a/extras/tests/JsonVariant/containsKey.cpp +++ /dev/null @@ -1,36 +0,0 @@ -// ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON -// MIT License - -#include -#include -#include - -#include "Literals.hpp" - -TEST_CASE("JsonVariant::containsKey()") { - JsonDocument doc; - JsonVariant var = doc.to(); - - SECTION("containsKey(const char*)") { - var["hello"] = "world"; - - REQUIRE(var.containsKey("hello") == true); - REQUIRE(var.containsKey("world") == false); - } - - SECTION("containsKey(std::string)") { - var["hello"] = "world"; - - REQUIRE(var.containsKey("hello"_s) == true); - REQUIRE(var.containsKey("world"_s) == false); - } - - SECTION("containsKey(JsonVariant)") { - var["hello"] = "world"; - var["key"] = "hello"; - - REQUIRE(var.containsKey(doc["key"]) == true); - REQUIRE(var.containsKey(doc["foo"]) == false); - } -} diff --git a/extras/tests/JsonVariant/unbound.cpp b/extras/tests/JsonVariant/unbound.cpp index ff936258..0f1740b2 100644 --- a/extras/tests/JsonVariant/unbound.cpp +++ b/extras/tests/JsonVariant/unbound.cpp @@ -73,10 +73,6 @@ TEST_CASE("Unbound JsonVariant") { CHECK_FALSE(variant["key"_s].set(1)); } - SECTION("containsKey()") { - CHECK_FALSE(variant.containsKey("hello")); - } - SECTION("remove()") { variant.remove(0); variant.remove("hello"); diff --git a/extras/tests/JsonVariantConst/CMakeLists.txt b/extras/tests/JsonVariantConst/CMakeLists.txt index d0dc65e9..b943f16c 100644 --- a/extras/tests/JsonVariantConst/CMakeLists.txt +++ b/extras/tests/JsonVariantConst/CMakeLists.txt @@ -4,7 +4,6 @@ add_executable(JsonVariantConstTests as.cpp - containsKey.cpp is.cpp isnull.cpp nesting.cpp diff --git a/extras/tests/JsonVariantConst/containsKey.cpp b/extras/tests/JsonVariantConst/containsKey.cpp deleted file mode 100644 index dfa1fc80..00000000 --- a/extras/tests/JsonVariantConst/containsKey.cpp +++ /dev/null @@ -1,41 +0,0 @@ -// ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON -// MIT License - -#include -#include -#include - -#include "Literals.hpp" - -TEST_CASE("JsonVariantConst::containsKey()") { - JsonDocument doc; - doc["hello"] = "world"; - JsonVariantConst var = doc.as(); - - SECTION("support const char*") { - REQUIRE(var.containsKey("hello") == true); - REQUIRE(var.containsKey("world") == false); - } - - SECTION("support std::string") { - REQUIRE(var.containsKey("hello"_s) == true); - REQUIRE(var.containsKey("world"_s) == false); - } - -#ifdef HAS_VARIABLE_LENGTH_ARRAY - SECTION("supports VLA") { - size_t i = 16; - char vla[i]; - strcpy(vla, "hello"); - - REQUIRE(true == var.containsKey(vla)); - } -#endif - - SECTION("support JsonVariant") { - doc["key"] = "hello"; - REQUIRE(var.containsKey(var["key"]) == true); - REQUIRE(var.containsKey(var["foo"]) == false); - } -} diff --git a/extras/tests/Misc/unsigned_char.cpp b/extras/tests/Misc/unsigned_char.cpp index fd780d62..a1bb1555 100644 --- a/extras/tests/Misc/unsigned_char.cpp +++ b/extras/tests/Misc/unsigned_char.cpp @@ -176,15 +176,6 @@ TEST_CASE("unsigned char[]") { } #endif - SECTION("containsKey()") { - unsigned char key[] = "hello"; - - JsonDocument doc; - deserializeJson(doc, "{\"hello\":\"world\"}"); - JsonObject obj = doc.as(); - REQUIRE(true == obj.containsKey(key)); - } - SECTION("remove()") { unsigned char key[] = "hello"; diff --git a/src/ArduinoJson/Document/JsonDocument.hpp b/src/ArduinoJson/Document/JsonDocument.hpp index acad2b2f..5ba62f48 100644 --- a/src/ArduinoJson/Document/JsonDocument.hpp +++ b/src/ArduinoJson/Document/JsonDocument.hpp @@ -150,24 +150,27 @@ class JsonDocument : public detail::VariantOperators { return getVariant().template to(); } - // Returns true if the root object contains the specified key. + // DEPRECATED: use obj["key"].is() instead // https://arduinojson.org/v7/api/jsondocument/containskey/ template + ARDUINOJSON_DEPRECATED("use doc[\"key\"].is() instead") bool containsKey(TChar* key) const { return data_.getMember(detail::adaptString(key), &resources_) != 0; } - // Returns true if the root object contains the specified key. + // DEPRECATED: use obj[key].is() instead // https://arduinojson.org/v7/api/jsondocument/containskey/ template + ARDUINOJSON_DEPRECATED("use doc[key].is() instead") detail::enable_if_t::value, bool> containsKey( const TString& key) const { return data_.getMember(detail::adaptString(key), &resources_) != 0; } - // Returns true if the root object contains the specified key. + // DEPRECATED: use obj[key].is() instead // https://arduinojson.org/v7/api/jsondocument/containskey/ template + ARDUINOJSON_DEPRECATED("use doc[key].is() instead") detail::enable_if_t::value, bool> containsKey( const TVariant& key) const { return containsKey(key.template as()); diff --git a/src/ArduinoJson/Object/JsonObject.hpp b/src/ArduinoJson/Object/JsonObject.hpp index a11af746..2eeeed36 100644 --- a/src/ArduinoJson/Object/JsonObject.hpp +++ b/src/ArduinoJson/Object/JsonObject.hpp @@ -161,27 +161,30 @@ class JsonObject : public detail::VariantOperators { resources_); } - // Returns true if the object contains the specified key. + // DEPRECATED: use obj[key].is() instead // https://arduinojson.org/v7/api/jsonobject/containskey/ template + ARDUINOJSON_DEPRECATED("use obj[key].is() instead") detail::enable_if_t::value, bool> containsKey( const TString& key) const { return detail::ObjectData::getMember(data_, detail::adaptString(key), resources_) != 0; } - // Returns true if the object contains the specified key. + // DEPRECATED: use obj["key"].is() instead // https://arduinojson.org/v7/api/jsonobject/containskey/ template + ARDUINOJSON_DEPRECATED("use obj[\"key\"].is() instead") detail::enable_if_t::value, bool> containsKey( TChar* key) const { return detail::ObjectData::getMember(data_, detail::adaptString(key), resources_) != 0; } - // Returns true if the object contains the specified key. + // DEPRECATED: use obj[key].is() instead // https://arduinojson.org/v7/api/jsonobject/containskey/ template + ARDUINOJSON_DEPRECATED("use obj[key].is() instead") detail::enable_if_t::value, bool> containsKey( const TVariant& key) const { return containsKey(key.template as()); diff --git a/src/ArduinoJson/Object/JsonObjectConst.hpp b/src/ArduinoJson/Object/JsonObjectConst.hpp index 81132e28..3af7d12e 100644 --- a/src/ArduinoJson/Object/JsonObjectConst.hpp +++ b/src/ArduinoJson/Object/JsonObjectConst.hpp @@ -68,26 +68,29 @@ class JsonObjectConst : public detail::VariantOperators { return iterator(); } - // Returns true if the object contains the specified key. + // DEPRECATED: use obj[key].is() instead // https://arduinojson.org/v7/api/jsonobjectconst/containskey/ template + ARDUINOJSON_DEPRECATED("use obj[key].is() instead") detail::enable_if_t::value, bool> containsKey( const TString& key) const { return detail::ObjectData::getMember(data_, detail::adaptString(key), resources_) != 0; } - // Returns true if the object contains the specified key. + // DEPRECATED: use obj["key"].is() instead // https://arduinojson.org/v7/api/jsonobjectconst/containskey/ template + ARDUINOJSON_DEPRECATED("use obj[\"key\"].is() instead") bool containsKey(TChar* key) const { return detail::ObjectData::getMember(data_, detail::adaptString(key), resources_) != 0; } - // Returns true if the object contains the specified key. + // DEPRECATED: use obj[key].is() instead // https://arduinojson.org/v7/api/jsonobjectconst/containskey/ template + ARDUINOJSON_DEPRECATED("use obj[key].is() instead") detail::enable_if_t::value, bool> containsKey( const TVariant& key) const { return containsKey(key.template as()); diff --git a/src/ArduinoJson/Variant/JsonVariantConst.hpp b/src/ArduinoJson/Variant/JsonVariantConst.hpp index a1678fae..51472045 100644 --- a/src/ArduinoJson/Variant/JsonVariantConst.hpp +++ b/src/ArduinoJson/Variant/JsonVariantConst.hpp @@ -139,25 +139,30 @@ class JsonVariantConst : public detail::VariantTag, return operator[](key.template as()); } - // Returns true if tge object contains the specified key. + // DEPRECATED: use obj[key].is() instead // https://arduinojson.org/v7/api/jsonvariantconst/containskey/ template + ARDUINOJSON_DEPRECATED("use var[key].is() instead") detail::enable_if_t::value, bool> containsKey( const TString& key) const { return detail::VariantData::getMember(getData(), detail::adaptString(key), resources_) != 0; } - // Returns true if tge object contains the specified key. + // DEPRECATED: use obj["key"].is() instead // https://arduinojson.org/v7/api/jsonvariantconst/containskey/ template + ARDUINOJSON_DEPRECATED("use obj[\"key\"].is() instead") detail::enable_if_t::value, bool> containsKey( TChar* key) const { return detail::VariantData::getMember(getData(), detail::adaptString(key), resources_) != 0; } + // DEPRECATED: use obj[key].is() instead + // https://arduinojson.org/v7/api/jsonvariantconst/containskey/ template + ARDUINOJSON_DEPRECATED("use var[key].is() instead") detail::enable_if_t::value, bool> containsKey( const TVariant& key) const { return containsKey(key.template as()); diff --git a/src/ArduinoJson/Variant/VariantRefBase.hpp b/src/ArduinoJson/Variant/VariantRefBase.hpp index f64b2c6a..6a79af0f 100644 --- a/src/ArduinoJson/Variant/VariantRefBase.hpp +++ b/src/ArduinoJson/Variant/VariantRefBase.hpp @@ -165,20 +165,23 @@ class VariantRefBase : public VariantTag { // https://arduinojson.org/v7/api/jsonvariant/subscript/ ElementProxy operator[](size_t index) const; - // Returns true if the object contains the specified key. + // DEPRECATED: use obj[key].is() instead // https://arduinojson.org/v7/api/jsonvariant/containskey/ template + ARDUINOJSON_DEPRECATED("use obj[key].is() instead") enable_if_t::value, bool> containsKey( const TString& key) const; - // Returns true if the object contains the specified key. + // DEPRECATED: use obj["key"].is() instead // https://arduinojson.org/v7/api/jsonvariant/containskey/ template + ARDUINOJSON_DEPRECATED("use obj[\"key\"].is() instead") enable_if_t::value, bool> containsKey(TChar* key) const; - // Returns true if the object contains the specified key. + // DEPRECATED: use obj[key].is() instead // https://arduinojson.org/v7/api/jsonvariant/containskey/ template + ARDUINOJSON_DEPRECATED("use obj[key].is() instead") enable_if_t::value, bool> containsKey( const TVariant& key) const;