I suppose it is intended to provide a streaming processing of the input, on top of which an application-specific layer can be written. But when I implemented it in Gauche, it did feel awkward. json-generator itself needs to be a pushdown automaton to keep track of the context in which it is in, and the user of it needs to keep track of the context again, which seems a duplication.