diff --git a/ArduinoJsonParser.cpp b/ArduinoJsonParser.cpp index e43d9dbc..288a092f 100644 --- a/ArduinoJsonParser.cpp +++ b/ArduinoJsonParser.cpp @@ -34,7 +34,7 @@ bool JsonParserBase::parse(char* jsonString) return true; } -char* JsonHashTable::getString(char* name) +jsmntok_t* JsonHashTable::getToken(char* name) { // skip first token, it's the whole object int currentToken = 1; @@ -48,7 +48,7 @@ char* JsonHashTable::getString(char* name) // Compare with desired name if (strcmp(name, key) == 0) { - return json + tokens[currentToken + 1].start; + return &tokens[currentToken + 1]; } // move forward: key + value + nested tokens @@ -58,6 +58,12 @@ char* JsonHashTable::getString(char* name) return NULL; } +JsonArray JsonHashTable::getArray(char* key) +{ + jsmntok_t* token = getToken(key); + return JsonArray(json, token); +} + char* JsonArray::getString(int index) { if (json == NULL) return NULL; diff --git a/ArduinoJsonParser.h b/ArduinoJsonParser.h index 509f520e..a8acda80 100644 --- a/ArduinoJsonParser.h +++ b/ArduinoJsonParser.h @@ -10,8 +10,6 @@ #include #include "utility/jsmn.h" -class JsonArray; - class JsonObjectBase { public: @@ -41,6 +39,8 @@ protected: jsmntok_t* tokens; }; +class JsonArray; + class JsonHashTable : public JsonObjectBase { friend class JsonParserBase; @@ -52,7 +52,12 @@ public: } - char* getString(char* key); + char* getString(char* key) + { + jsmntok_t* token = getToken(key); + return token != NULL ? json + token->start : NULL; + } + JsonArray getArray(char* key); private: @@ -62,11 +67,14 @@ private: { } + + jsmntok_t* getToken(char* key); }; class JsonArray : public JsonObjectBase { friend class JsonParserBase; + friend class JsonHashTable; public: