json lib
Dependents: grove_stream_jpa_sd2 grove_stream_jpa_sd2 grove_stream_jpa_sd2-2 grove_stream_jpa_sd2-3 ... more
Diff: Json.h
- Revision:
- 3:fab591fca1e7
- Child:
- 4:ae34010d87e5
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Json.h Thu Jun 02 06:08:24 2016 +0000 @@ -0,0 +1,82 @@ +#ifndef __JSON_LIB_CLASS_H_ +#define __JSON_LIB_CLASS_H_ + +#include "jsmn.h" +#include <stdlib.h> +#include <string.h> + +/** + * JSON wrapper over JSMN lib + */ + +class Json +{ + private: + const char * source; + const size_t sourceLength; + jsmntok_t * tokens; + int tokenCount; + Json ( const Json & other ); + + public: + /** The only constructor allowed. As JSON object will create/allocate + * memory for it's working, in favor of small memory fottprints, it + * is not allowed to be passed-by-value. So there is no copy or + * default constructor + * @param jsonString - char string containing JSON data + * @param length - length of the jsonString + */ + Json ( const char * jsonString, size_t length ); + virtual ~Json (); + + int findKeyIndexIn ( const char * key, const int &parentIndex ) const; + int findChildIndexOf ( const int &parentIndex, const int &startingAt ) const; + bool matches ( const int & tokenIndex, const char * value ) const; + + inline bool isValidJson () const; + inline jsmntype_t type ( const int tokenIndex ) const; + inline int parent ( const int tokenIndex ) const; + inline int childCount ( const int tokenIndex ) const; + inline int tokenLength ( const int tokenIndex ) const; + inline const char * tokenAddress ( const int tokenIndex ) const; + + int tokenIntegerValue ( const int tokenIndex ) const; + float tokenNumberValue ( const int tokenIndex ) const; + + inline bool tokenBooleanValue ( const int tokenIndex ) const; + + // void print () const; +}; + +inline bool Json::isValidJson () const +{ + return ( tokenCount >= 1 ); +} + +inline jsmntype_t Json::type ( const int tokenIndex ) const +{ + return tokens [ tokenIndex ].type; +} + +inline int Json::parent ( const int tokenIndex ) const +{ + return tokens [ tokenIndex ].parent; +} + +inline int Json::childCount ( const int tokenIndex ) const +{ + return tokens [ tokenIndex ].childCount; +} + +inline int Json::tokenLength ( const int tokenIndex ) const +{ + return tokens [ tokenIndex ].end - tokens [ tokenIndex ].start; +} + +inline const char * Json::tokenAddress ( const int tokenIndex ) const +{ + return source + tokens [ tokenIndex ].start; +} + +#endif +