Added comments

This commit is contained in:
Benoit Blanchon
2014-07-22 20:14:25 +02:00
parent 0fc54ba54c
commit 805c0741e6
5 changed files with 89 additions and 68 deletions

View File

@ -19,7 +19,6 @@ namespace ArduinoJson
JsonPair(JsonToken token) JsonPair(JsonToken token)
: JsonToken(token) : JsonToken(token)
{ {
} }
// Get the key // Get the key

View File

@ -11,19 +11,14 @@ namespace ArduinoJson
{ {
namespace Parser namespace Parser
{ {
/* // The JSON parser.
* The JSON parser. //
* // You need to specifiy the number of token to be allocated for that parser.
* You need to specifiy the number of token to be allocated for that parser. //
* Values from 16 to 32 are recommended. // CAUTION: JsonArray, JsonObject and JsonValue contain pointers to tokens of the
* The parser size will be MAX_TOKEN*8 bytes. // JsonParser, so they need the JsonParser to be in memory to work.
* Don't forget that the memory size of standard Arduino board is only 2KB // As a result, you must not create JsonArray, JsonObject or JsonValue that have a
* // longer life that the JsonParser.
* CAUTION: JsonArray and JsonHashTable contain pointers to tokens of the
* JsonParser, so they need the JsonParser to be in memory to work.
* As a result, you must not create JsonArray and JsonHashTable that have a
* longer life that the JsonParser.
*/
template <int MAX_TOKENS> template <int MAX_TOKENS>
class JsonParser : public JsonParserBase class JsonParser : public JsonParserBase
{ {

View File

@ -12,34 +12,30 @@ namespace ArduinoJson
{ {
namespace Parser namespace Parser
{ {
// Base class for the JSON parser, in case you want to provide your own buffer
class JsonParserBase class JsonParserBase
{ {
public: public:
// Create a JSON parser using the provided buffer
JsonParserBase(jsmntok_t* tokens, int maxTokens) JsonParserBase(jsmntok_t* tokens, int maxTokens)
: tokens(tokens), maxTokens(maxTokens) : tokens(tokens), maxTokens(maxTokens)
{ {
} }
// Parse the JSON string and return a array
//
// The content of the string may be altered to add '\0' at the
// end of string tokens
JsonValue parse(char* json); JsonValue parse(char* json);
/* // Obsolete: use parse() instead
* Parse the JSON string and return a array.
*
* The content of the string may be altered to add '\0' at the
* end of string tokens
*/
DEPRECATED JsonArray parseArray(char* json) DEPRECATED JsonArray parseArray(char* json)
{ {
return parse(json); return parse(json);
} }
/* // Obsolete: use parse() instead
* Parse the JSON string and return a array.
*
* The content of the string may be altered to add '\0' at the
* end of string tokens
*/
DEPRECATED JsonObject parseHashTable(char* json) DEPRECATED JsonObject parseHashTable(char* json)
{ {
return parse(json); return parse(json);

View File

@ -11,73 +11,85 @@ namespace ArduinoJson
{ {
namespace Parser namespace Parser
{ {
// A pointer to a JSON token
class JsonToken class JsonToken
{ {
public: public:
// Create a "null" pointer
JsonToken() JsonToken()
: token(0) : token(0)
{ {
} }
// Create a pointer to the specified JSON token
JsonToken(char* json, jsmntok_t* token) JsonToken(char* json, jsmntok_t* token)
: json(json), token(token) : json(json), token(token)
{ {
} }
// Get content of the JSON token
char* getText() char* getText()
{ {
json[token->end] = 0; json[token->end] = 0;
return json + token->start; return json + token->start;
} }
// Get the number of children tokens
int childrenCount()
{
return token->size;
}
// Get a pointer to the first child of the current token
JsonToken firstChild() const JsonToken firstChild() const
{ {
return JsonToken(json, token + 1); return JsonToken(json, token + 1);
} }
// Get a pointer to the next sibling token (ie skiping the children tokens)
JsonToken nextSibling() const; JsonToken nextSibling() const;
// Test equality
bool operator!=(const JsonToken& other) const bool operator!=(const JsonToken& other) const
{ {
return token != other.token; return token != other.token;
} }
static JsonToken null() // Tell if the pointer is "null"
{
return JsonToken(0, 0);
}
bool isValid() bool isValid()
{ {
return token != 0; return token != 0;
} }
// Tell if the JSON token is a JSON object
bool isObject() bool isObject()
{ {
return token != 0 && token->type == JSMN_OBJECT; return token != 0 && token->type == JSMN_OBJECT;
} }
// Tell if the JSON token is a JSON array
bool isArray() bool isArray()
{ {
return token != 0 && token->type == JSMN_ARRAY; return token != 0 && token->type == JSMN_ARRAY;
} }
// Tell if the JSON token is a primitive
bool isPrimitive() bool isPrimitive()
{ {
return token != 0 && token->type == JSMN_PRIMITIVE; return token != 0 && token->type == JSMN_PRIMITIVE;
} }
// Tell if the JSON token is a string
bool isString() bool isString()
{ {
return token != 0 && token->type == JSMN_STRING; return token != 0 && token->type == JSMN_STRING;
} }
int childrenCount() // Explicit wait to create a "null" JsonToken
static JsonToken null()
{ {
return token->size; return JsonToken();
} }
private: private:
@ -86,4 +98,3 @@ namespace ArduinoJson
}; };
} }
} }

View File

@ -21,31 +21,51 @@ namespace ArduinoJson
{ {
namespace Parser namespace Parser
{ {
// A JSON value
// Can be converted to string, double, bool, array or object.
class JsonValue : protected JsonToken class JsonValue : protected JsonToken
{ {
public: public:
// Create a invalid value
JsonValue() JsonValue()
{ {
} }
// Convert a JsonToken to a JsonValue
JsonValue(JsonToken token) JsonValue(JsonToken token)
: JsonToken(token) : JsonToken(token)
{ {
} }
// Tell is the JsonValue is valid
bool success() bool success()
{ {
return isValid(); return isValid();
} }
// Convert the JsonValue to a bool.
// Returns false if the JsonValue is not a boolean.
operator bool(); operator bool();
// Convert the JsonValue to a floating point value.
// Returns false if the JsonValue is not a number.
operator double(); operator double();
// Convert the JsonValue to a long integer.
// Returns 0 if the JsonValue is not a number.
operator long(); operator long();
// Convert the JsonValue to a string.
// Returns 0 if the JsonValue is not a string.
operator char*(); operator char*();
// Get the nested value at the specified index.
// Returns an invalid JsonValue if the current value is not an array.
JsonValue operator[](int index); JsonValue operator[](int index);
// Get the nested value matching the specified index.
// Returns an invalid JsonValue if the current value is not an object.
JsonValue operator[](const char* key); JsonValue operator[](const char* key);
}; };
} }