While alternative parsers exists (javascript has LosslessJSON for example), they're a pain to use.
Using strings for floats only has a tiny overhead, but it allows users to use standard JSON parsers and it signals a good practice.
If you use JSON numbers to serialize money, you create a situation where the path with the least friction is the incorrect one.
FWIW in Python that's as uncomplicated as
json.loads('1.1', parse_float=decimal.Decimal)
While alternative parsers exists (javascript has LosslessJSON for example), they're a pain to use.
Using strings for floats only has a tiny overhead, but it allows users to use standard JSON parsers and it signals a good practice.
If you use JSON numbers to serialize money, you create a situation where the path with the least friction is the incorrect one.