ArduinoJsonParser.h 906 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. /*
  2. * malloc-free JSON parser for Arduino
  3. * Benoit Blanchon 2014
  4. * MIT License
  5. */
  6. #ifndef __ARDUINOJSONPARSER_H
  7. #define __ARDUINOJSONPARSER_H
  8. #include <Arduino.h>
  9. #include "utility/jsmn.h"
  10. class JsonParserBase
  11. {
  12. protected:
  13. JsonParserBase(jsmntok_t* tokens, int tokenCount)
  14. {
  15. this->tokenCount = tokenCount;
  16. this->tokens = tokens;
  17. jsmn_init(&parser);
  18. }
  19. bool parseTokens(char* jsonString);
  20. char* getValueByKey(char* name);
  21. private:
  22. char* buffer;
  23. jsmn_parser parser;
  24. int tokenCount;
  25. jsmntok_t* tokens;
  26. };
  27. template <int N>
  28. class ArduinoJsonParser : JsonParserBase
  29. {
  30. public:
  31. ArduinoJsonParser()
  32. : JsonParserBase(tokens, N * 2 + 1)
  33. {
  34. }
  35. bool parse(char* json)
  36. {
  37. return parseTokens(json);
  38. }
  39. char* getValue(char* name)
  40. {
  41. return getValueByKey(name);
  42. }
  43. private:
  44. jsmntok_t tokens[N * 2 + 1];
  45. };
  46. #endif