diff --git a/ArduinoJsonParser.cpp b/ArduinoJsonParser.cpp index 8788573d..e43d9dbc 100644 --- a/ArduinoJsonParser.cpp +++ b/ArduinoJsonParser.cpp @@ -57,37 +57,22 @@ char* JsonHashTable::getString(char* name) return NULL; } -/* -char* JsonParserBase::getValueByIndex(int index) + +char* JsonArray::getString(int index) { - for (int i = 1; i < parser.toknext; i++) + if (json == NULL) return NULL; + if (tokens == NULL) return NULL; + if (index < 0) return NULL; + if (index >= tokens[0].size) return NULL; + + // skip first token, it's the whole object + int currentToken = 1; + + for (int i = 0; i < index; i++) { - if (index == 0) - { - return buffer + tokens[i].start; - } - - // skip nested objects - i += getNestedTokenCounts(i); - - index--; + // move forward: current + nested tokens + currentToken += 1 + getNestedTokenCounts(currentToken); } - return NULL; + return json + tokens[currentToken].start; } - -int JsonParserBase::getArraySize() -{ - int size = 0; - - for (int i = 1; i < parser.toknext; i++) - { - // skip nested objects - i += getNestedTokenCounts(i); - - size++; - } - - return size; -} -*/ \ No newline at end of file diff --git a/ArduinoJsonParser.h b/ArduinoJsonParser.h index cb1f9de4..509f520e 100644 --- a/ArduinoJsonParser.h +++ b/ArduinoJsonParser.h @@ -10,6 +10,8 @@ #include #include "utility/jsmn.h" +class JsonArray; + class JsonObjectBase { public: @@ -51,6 +53,7 @@ public: } char* getString(char* key); + JsonArray getArray(char* key); private: @@ -61,10 +64,47 @@ private: } }; +class JsonArray : public JsonObjectBase +{ + friend class JsonParserBase; + +public: + +public: + + JsonArray() + { + + } + + char* getString(int index); + + int getLength() + { + return tokens != NULL ? tokens[0].size : 0; + } + +private: + + JsonArray(char* json, jsmntok_t* tokens) + : JsonObjectBase(json, tokens) + { + + } +}; + class JsonParserBase { public: + JsonArray parseArray(char* json) + { + if (!parse(json) || tokens[0].type != JSMN_ARRAY) + return JsonArray(); + + return JsonArray(json, tokens); + } + JsonHashTable parseHashTable(char* json) { if (!parse(json) || tokens[0].type != JSMN_OBJECT) @@ -72,7 +112,7 @@ public: return JsonHashTable(json, tokens); } - + protected: JsonParserBase(jsmntok_t* tokens, int maxTokenCount)