groovy-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Suderman Keith <suder...@anc.org>
Subject Re: JsonOutput serialization options feature
Date Sun, 11 Sep 2016 15:43:19 GMT
+1

I haven't had a chance to look at your pull request, but the lack of configurability is the
main reason I use Jackson instead of the Groovy JsonBuilder/JsonOutput classes.

Keith

> On Sep 10, 2016, at 8:59 PM, John Wagenleitner <john.wagenleitner@gmail.com <mailto:john.wagenleitner@gmail.com>>
wrote:
> 
> Groovy Json users,
> 
> I recently worked on a project where it would have been helpful if JsonOutput/JsonBuilder/StreamingJsonBuilder
had options for controlling the output.  I noticed there were some open tickets [1] for feature
requests around this so decided to try to add some options to control the serialization and
have proposed a pull request (https://github.com/apache/groovy/pull/371 <https://github.com/apache/groovy/pull/371>).
> 
> Just wanted to poll those that use the Json generating features in Groovy to see if you
think these options would be useful and would welcome any code review for those that would
be interested in reviewing the PR.  For a quick overview I've included a sample below [2].
> 
> [1] 
> GROOVY-6699: JSON slurper ability to ignore propertie/field names (at least the serializing
part)
> GROOVY-6854: JsonOutput should be configurable with ISO 8601 UTC time zone instead of
GMT
> GROOVY-7682: JsonBuilder or JsonOutput incompatible with JodaTime (for now via a closure
converter)
> GROOVY-7780: JSONBuilder/JSONSlurper: Option to Only Include NonNull values
> GROOVY-7858: Make JsonBuilder configurable to not write entries with null values
> 
> [2]  
> import groovy.json.*
> 
> def options = JsonOutput.options()
>         .excludeNulls()
>         .excludeFieldsByName('make', 'country', 'record')
>         .excludeFieldsByType(Number)
>         .addConverter(URL) { url -> '"http://groovy-lang.org <http://groovy-lang.org/>"'
}
> 
> StringWriter writer = new StringWriter()
> StreamingJsonBuilder builder = new StreamingJsonBuilder(writer, options)
> 
> builder.records {
>     car {
>         name 'HSV Maloo'
>         make 'Holden'
>         year 2006
>         country 'Australia'
>         homepage new URL('http://example.org <http://example.org/>')
>         record {
>             type 'speed'
>             description 'production pickup truck with speed of 271kph'
>         }
>     }
> }
> 
> assert writer.toString() == '{"records":{"car":{"name":"HSV Maloo","homepage":"http://groovy-lang.org
<http://groovy-lang.org/>"}}}'

------------------------------
Research Associate
Department of Computer Science
Vassar College
Poughkeepsie, NY



------------------------------
Research Associate
Department of Computer Science
Vassar College
Poughkeepsie, NY


Mime
View raw message