json lib
Dependents: grove_stream_jpa_sd2 grove_stream_jpa_sd2 grove_stream_jpa_sd2-2 grove_stream_jpa_sd2-3 ... more
Json.h@3:fab591fca1e7, 2016-06-02 (annotated)
- Committer:
- mercurywaters
- Date:
- Thu Jun 02 06:08:24 2016 +0000
- Revision:
- 3:fab591fca1e7
- Child:
- 4:ae34010d87e5
Added the documentation of JSON class
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mercurywaters | 3:fab591fca1e7 | 1 | #ifndef __JSON_LIB_CLASS_H_ |
mercurywaters | 3:fab591fca1e7 | 2 | #define __JSON_LIB_CLASS_H_ |
mercurywaters | 3:fab591fca1e7 | 3 | |
mercurywaters | 3:fab591fca1e7 | 4 | #include "jsmn.h" |
mercurywaters | 3:fab591fca1e7 | 5 | #include <stdlib.h> |
mercurywaters | 3:fab591fca1e7 | 6 | #include <string.h> |
mercurywaters | 3:fab591fca1e7 | 7 | |
mercurywaters | 3:fab591fca1e7 | 8 | /** |
mercurywaters | 3:fab591fca1e7 | 9 | * JSON wrapper over JSMN lib |
mercurywaters | 3:fab591fca1e7 | 10 | */ |
mercurywaters | 3:fab591fca1e7 | 11 | |
mercurywaters | 3:fab591fca1e7 | 12 | class Json |
mercurywaters | 3:fab591fca1e7 | 13 | { |
mercurywaters | 3:fab591fca1e7 | 14 | private: |
mercurywaters | 3:fab591fca1e7 | 15 | const char * source; |
mercurywaters | 3:fab591fca1e7 | 16 | const size_t sourceLength; |
mercurywaters | 3:fab591fca1e7 | 17 | jsmntok_t * tokens; |
mercurywaters | 3:fab591fca1e7 | 18 | int tokenCount; |
mercurywaters | 3:fab591fca1e7 | 19 | Json ( const Json & other ); |
mercurywaters | 3:fab591fca1e7 | 20 | |
mercurywaters | 3:fab591fca1e7 | 21 | public: |
mercurywaters | 3:fab591fca1e7 | 22 | /** The only constructor allowed. As JSON object will create/allocate |
mercurywaters | 3:fab591fca1e7 | 23 | * memory for it's working, in favor of small memory fottprints, it |
mercurywaters | 3:fab591fca1e7 | 24 | * is not allowed to be passed-by-value. So there is no copy or |
mercurywaters | 3:fab591fca1e7 | 25 | * default constructor |
mercurywaters | 3:fab591fca1e7 | 26 | * @param jsonString - char string containing JSON data |
mercurywaters | 3:fab591fca1e7 | 27 | * @param length - length of the jsonString |
mercurywaters | 3:fab591fca1e7 | 28 | */ |
mercurywaters | 3:fab591fca1e7 | 29 | Json ( const char * jsonString, size_t length ); |
mercurywaters | 3:fab591fca1e7 | 30 | virtual ~Json (); |
mercurywaters | 3:fab591fca1e7 | 31 | |
mercurywaters | 3:fab591fca1e7 | 32 | int findKeyIndexIn ( const char * key, const int &parentIndex ) const; |
mercurywaters | 3:fab591fca1e7 | 33 | int findChildIndexOf ( const int &parentIndex, const int &startingAt ) const; |
mercurywaters | 3:fab591fca1e7 | 34 | bool matches ( const int & tokenIndex, const char * value ) const; |
mercurywaters | 3:fab591fca1e7 | 35 | |
mercurywaters | 3:fab591fca1e7 | 36 | inline bool isValidJson () const; |
mercurywaters | 3:fab591fca1e7 | 37 | inline jsmntype_t type ( const int tokenIndex ) const; |
mercurywaters | 3:fab591fca1e7 | 38 | inline int parent ( const int tokenIndex ) const; |
mercurywaters | 3:fab591fca1e7 | 39 | inline int childCount ( const int tokenIndex ) const; |
mercurywaters | 3:fab591fca1e7 | 40 | inline int tokenLength ( const int tokenIndex ) const; |
mercurywaters | 3:fab591fca1e7 | 41 | inline const char * tokenAddress ( const int tokenIndex ) const; |
mercurywaters | 3:fab591fca1e7 | 42 | |
mercurywaters | 3:fab591fca1e7 | 43 | int tokenIntegerValue ( const int tokenIndex ) const; |
mercurywaters | 3:fab591fca1e7 | 44 | float tokenNumberValue ( const int tokenIndex ) const; |
mercurywaters | 3:fab591fca1e7 | 45 | |
mercurywaters | 3:fab591fca1e7 | 46 | inline bool tokenBooleanValue ( const int tokenIndex ) const; |
mercurywaters | 3:fab591fca1e7 | 47 | |
mercurywaters | 3:fab591fca1e7 | 48 | // void print () const; |
mercurywaters | 3:fab591fca1e7 | 49 | }; |
mercurywaters | 3:fab591fca1e7 | 50 | |
mercurywaters | 3:fab591fca1e7 | 51 | inline bool Json::isValidJson () const |
mercurywaters | 3:fab591fca1e7 | 52 | { |
mercurywaters | 3:fab591fca1e7 | 53 | return ( tokenCount >= 1 ); |
mercurywaters | 3:fab591fca1e7 | 54 | } |
mercurywaters | 3:fab591fca1e7 | 55 | |
mercurywaters | 3:fab591fca1e7 | 56 | inline jsmntype_t Json::type ( const int tokenIndex ) const |
mercurywaters | 3:fab591fca1e7 | 57 | { |
mercurywaters | 3:fab591fca1e7 | 58 | return tokens [ tokenIndex ].type; |
mercurywaters | 3:fab591fca1e7 | 59 | } |
mercurywaters | 3:fab591fca1e7 | 60 | |
mercurywaters | 3:fab591fca1e7 | 61 | inline int Json::parent ( const int tokenIndex ) const |
mercurywaters | 3:fab591fca1e7 | 62 | { |
mercurywaters | 3:fab591fca1e7 | 63 | return tokens [ tokenIndex ].parent; |
mercurywaters | 3:fab591fca1e7 | 64 | } |
mercurywaters | 3:fab591fca1e7 | 65 | |
mercurywaters | 3:fab591fca1e7 | 66 | inline int Json::childCount ( const int tokenIndex ) const |
mercurywaters | 3:fab591fca1e7 | 67 | { |
mercurywaters | 3:fab591fca1e7 | 68 | return tokens [ tokenIndex ].childCount; |
mercurywaters | 3:fab591fca1e7 | 69 | } |
mercurywaters | 3:fab591fca1e7 | 70 | |
mercurywaters | 3:fab591fca1e7 | 71 | inline int Json::tokenLength ( const int tokenIndex ) const |
mercurywaters | 3:fab591fca1e7 | 72 | { |
mercurywaters | 3:fab591fca1e7 | 73 | return tokens [ tokenIndex ].end - tokens [ tokenIndex ].start; |
mercurywaters | 3:fab591fca1e7 | 74 | } |
mercurywaters | 3:fab591fca1e7 | 75 | |
mercurywaters | 3:fab591fca1e7 | 76 | inline const char * Json::tokenAddress ( const int tokenIndex ) const |
mercurywaters | 3:fab591fca1e7 | 77 | { |
mercurywaters | 3:fab591fca1e7 | 78 | return source + tokens [ tokenIndex ].start; |
mercurywaters | 3:fab591fca1e7 | 79 | } |
mercurywaters | 3:fab591fca1e7 | 80 | |
mercurywaters | 3:fab591fca1e7 | 81 | #endif |
mercurywaters | 3:fab591fca1e7 | 82 |