JsonValue.cpp 1.7 KB

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