JsonValue.cpp 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. /*
  2. * Arduino JSON library
  3. * Benoit Blanchon 2014 - MIT License
  4. */
  5. #include "JsonValue.h"
  6. #include <cstdio>
  7. #include <cstring>
  8. size_t JsonValue::printBooleanTo(Print& p) const
  9. {
  10. return p.write(content.boolean ? "true" : "false");
  11. }
  12. size_t JsonValue::printNumberTo(Print& p) const
  13. {
  14. char tmp[16];
  15. sprintf(tmp, "%lg", content.number);
  16. return p.write(tmp);
  17. }
  18. size_t JsonValue::printObjectTo(Print& p) const
  19. {
  20. if (content.object)
  21. return ((Printable*) content.object)->printTo(p);
  22. else
  23. return p.write("null");
  24. }
  25. size_t JsonValue::printStringTo(Print& p) const
  26. {
  27. const char* s = content.string;
  28. if (!s)
  29. {
  30. return p.write("null");
  31. }
  32. size_t n = 0;
  33. n += p.write('\"');
  34. while (*s)
  35. {
  36. switch (*s)
  37. {
  38. case '"':
  39. n += p.write("\\\"");
  40. break;
  41. case '\\':
  42. n += p.write("\\\\");
  43. break;
  44. case '\b':
  45. n += p.write("\\b");
  46. break;
  47. case '\f':
  48. n += p.write("\\f");
  49. break;
  50. case '\n':
  51. n += p.write("\\n");
  52. break;
  53. case '\r':
  54. n += p.write("\\r");
  55. break;
  56. case '\t':
  57. n += p.write("\\t");
  58. break;
  59. default:
  60. n += p.write(*s);
  61. break;
  62. }
  63. s++;
  64. }
  65. n += p.write('\"');
  66. return n;
  67. }