[ https://issues.apache.org/jira/browse/GROOVY-7946?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Paul King closed GROOVY-7946. ----------------------------- > StreamingJsonBuilder should support writable values > --------------------------------------------------- > > Key: GROOVY-7946 > URL: https://issues.apache.org/jira/browse/GROOVY-7946 > Project: Groovy > Issue Type: Improvement > Affects Versions: 2.4.7 > Reporter: Graeme Rocher > Fix For: 2.4.8 > > > In order to compose logic with StreamingJsonBuilder it is often desirable to > split up the code into parts to make it more maintainable. For example with > Grails' JSON views you may have several different templates that make up the > entire JSON response. > In order to support this we had to fork StreamingJsonBuilder and add the > capability to pass a Writable as a value. The reason is, otherwise you have > to buffer in memory an entire string for child template. For example now you > would have to do something like this: > {code} > new StringWriter().with { w -> > def builder = new StreamingJsonBuilder(w) > def sw = new StringWriter() > new StreamingJsonBuilder(sw).call { > sectionId "world" > } > builder.response { > status "ok" > results sw.toString() > } > } > {code} > Which is inefficient and eliminates the memory benefits of streaming. Ideally > you want to do this: > {code} > new StringWriter().with { w -> > def builder = new StreamingJsonBuilder(w) > def writable = new Writable() { > @Override > Writer writeTo(Writer writer) throws IOException { > new StreamingJsonBuilder(writer).call { > sectionId "world" > } > return writer > } > } > builder.response { > status "ok" > results writable > } > } > {code} > Which allows you to continue streaming for child attributes of a JSON > document. > I have a pull request incoming for this improvement -- This message was sent by Atlassian JIRA (v6.3.15#6346)