ArduinoJsonParser.cpp 911 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. /*
  2. * malloc-free JSON parser for Arduino
  3. * Benoit Blanchon 2014
  4. * MIT License
  5. */
  6. #include "ArduinoJsonParser.h"
  7. bool JsonParserBase::parseTokens(char* jsonString)
  8. {
  9. buffer = jsonString;
  10. if (JSMN_SUCCESS != jsmn_parse(&parser, jsonString, tokens, tokenCount))
  11. return false;
  12. // Add null termination to each token
  13. for (int i = 0; i < tokenCount; i++)
  14. {
  15. buffer[tokens[i].end] = 0;
  16. }
  17. return true;
  18. }
  19. char* JsonParserBase::getValueByKey(char* name)
  20. {
  21. // Scan each keys, every two other token
  22. // (skip index 0, because it's the whole json object)
  23. for (int i = 1; i < tokenCount; i += 2)
  24. {
  25. // Early break if we reach the last token
  26. if (i >= parser.toknext) break;
  27. // Get key token string
  28. char* key = buffer + tokens[i].start;
  29. // Compare with desired name
  30. if (strcmp(name, key) == 0)
  31. {
  32. return buffer + tokens[i + 1].start;
  33. }
  34. }
  35. }