Переглянути джерело

Added JsonHashTable.getArray()

Benoit Blanchon 12 роки тому
батько
коміт
efe1dfba55
2 змінених файлів з 19 додано та 5 видалено
  1. 8 2
      ArduinoJsonParser.cpp
  2. 11 3
      ArduinoJsonParser.h

+ 8 - 2
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;

+ 11 - 3
ArduinoJsonParser.h

@@ -10,8 +10,6 @@
 #include <Arduino.h>
 #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: