Is there a reason that only writeDouble exists in the api and not writeFloat? But on the inverse there is json_floatValue.
It makes it so encoding something like "1.2f" has to be cast to double first, and results in encoding as something like 1.2000000476837
doubles are also specifically called out as performing slowly, and having to cast every float to a double across hundreds of things will likely impact serialization performance a lot.
So FWIW this may simply be because json as a format only has Number, which typically is a double-precision floating point IEEE-754 value anyway, so even if a writeFloat existed it would probably cast to double under the hood.
Since IEEE-754 guarantees that going from float -> double -> float is consistent, it's safe to write your float out as a double and then read it back as a float.
I agree it's a little confusing in the API though, perhaps that can be solved.