Gens and accs are just procedures of zero arguments and one argument respectively, so their efficiency is constrained by what they do. Doing JSON pretty much requires char-by-char parsing.
> I propose that the read procedures be allowed to accept a generator that
> returns characters as well as an input port, and that the write
> procedures be allowed to accept an accumulator of characters as well as
> an output port.
Are character-by-character generators and accumulators reasonably fast?
Are they amenable to well-known compiler optimizations?