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.