Several compromises were made to reduce the footprint of the library:

  1. The parser isn’t strict and accepts some invalid inputs.
    For example, it doesn’t reject malformed UTF-16 surrogate pairs, like \ud83d\ud83d
  2. Keys containing NUL characters (ASCII code 0, or \u0000) are not supported and get truncated.
  3. The string-to-float conversion is not perfect.
    For example, if the input is 0.123, you’ll get 0.1230000000000001.
  4. The float-to-string conversion is not perfect either.
    ArduinoJson serializes 1.7976931348623147e308 into "1.797693135e308".
    The rounding is correct, but the value exceeds double’s range.
Global warming stripes by Professor Ed Hawkins (University of Reading)