JsonValue.cpp 1.5 KB

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