JsonValue.cpp 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. /*
  2. * Arduino JSON library
  3. * Benoit Blanchon 2014 - MIT License
  4. */
  5. #include "JsonValue.h"
  6. size_t JsonValue::printBoolTo(Print& p) const
  7. {
  8. return p.write(content.asBool ? "true" : "false");
  9. }
  10. size_t JsonValue::printDoubleTo(Print& p) const
  11. {
  12. return p.print(content.asDouble);
  13. }
  14. size_t JsonValue::printFloatTo(Print& p) const
  15. {
  16. return p.print(content.asFloat);
  17. }
  18. size_t JsonValue::printLongTo(Print& p) const
  19. {
  20. return p.print(content.asLong);
  21. }
  22. size_t JsonValue::printPrintableTo(Print& p) const
  23. {
  24. if (content.asPrintable)
  25. return ((Printable*) content.asPrintable)->printTo(p);
  26. else
  27. return p.write("null");
  28. }
  29. size_t JsonValue::printStringTo(Print& p) const
  30. {
  31. const char* s = content.asString;
  32. if (!s)
  33. {
  34. return p.write("null");
  35. }
  36. size_t n = 0;
  37. n += p.write('\"');
  38. while (*s)
  39. {
  40. switch (*s)
  41. {
  42. case '"':
  43. n += p.write("\\\"");
  44. break;
  45. case '\\':
  46. n += p.write("\\\\");
  47. break;
  48. case '\b':
  49. n += p.write("\\b");
  50. break;
  51. case '\f':
  52. n += p.write("\\f");
  53. break;
  54. case '\n':
  55. n += p.write("\\n");
  56. break;
  57. case '\r':
  58. n += p.write("\\r");
  59. break;
  60. case '\t':
  61. n += p.write("\\t");
  62. break;
  63. default:
  64. n += p.write(*s);
  65. break;
  66. }
  67. s++;
  68. }
  69. n += p.write('\"');
  70. return n;
  71. }