Просмотр исходного кода

Added JsonVariant::operator[](const char*)

Benoit Blanchon 11 лет назад
Родитель
Сommit
e5669577df
3 измененных файлов с 25 добавлено и 1 удалено
  1. 5 1
      include/ArduinoJson/JsonVariant.hpp
  2. 5 0
      src/JsonVariant.cpp
  3. 15 0
      test/JsonVariant_Subscript_Tests.cpp

+ 5 - 1
include/ArduinoJson/JsonVariant.hpp

@@ -91,13 +91,17 @@ class JsonVariant {
 
   static JsonVariant &invalid() { return _invalid; }
 
-  bool success() { return _type != Internals::JSON_INVALID; }
+  bool success() {
+    return _type != Internals::JSON_INVALID &&
+           _type != Internals::JSON_UNDEFINED;
+  }
 
   template <typename T>
   void writeTo(T &writer) const;
 
   size_t size() const;
   JsonVariant &operator[](int index);
+  JsonVariant &operator[](const char *key);
 
  private:
   JsonVariant(Internals::JsonVariantType type) : _type(type) {}

+ 5 - 0
src/JsonVariant.cpp

@@ -86,6 +86,11 @@ JsonVariant &JsonVariant::operator[](int index) {
   return _content.asArray->operator[](index);
 }
 
+JsonVariant &JsonVariant::operator[](const char *key) {
+  if (_type != JSON_OBJECT) return JsonVariant::invalid();
+  return _content.asObject->operator[](key);
+}
+
 template <typename T>
 void JsonVariant::writeTo(T &writer) const {
   switch (_type) {

+ 15 - 0
test/JsonVariant_Subscript_Tests.cpp

@@ -29,4 +29,19 @@ TEST_F(JsonVariant_Subscript_Tests, Array) {
   EXPECT_STREQ("element at index 1", variant[1].asString());
   EXPECT_FALSE(variant[-1].success());
   EXPECT_FALSE(variant[3].success());
+  EXPECT_FALSE(variant["0"].success());
+}
+
+TEST_F(JsonVariant_Subscript_Tests, Object) {
+  JsonObject &object = buffer.createObject();
+  object["a"] = "element at key \"a\"";
+  object["b"] = "element at key \"b\"";
+
+  variant = object;
+
+  EXPECT_EQ(2, variant.size());
+  EXPECT_STREQ("element at key \"a\"", variant["a"].asString());
+  EXPECT_STREQ("element at key \"b\"", variant["b"].asString());
+  EXPECT_FALSE(variant["c"].success());
+  EXPECT_FALSE(variant[0].success());
 }