groovy-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Robert Stagner <restag...@gmail.com>
Subject Re: JsonOutput serialization options feature
Date Sun, 11 Sep 2016 18:15:44 GMT
+1 from me.  I like the ability to pick and choose what I can exclude

On Sun, Sep 11, 2016 at 8:47 AM Guillaume Laforge <glaforge@gmail.com>
wrote:

> More options sounds like a good idea.
>
> On Sun, Sep 11, 2016 at 5:43 PM, Suderman Keith <suderman@anc.org> wrote:
>
>> +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> 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).
>>
>> 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"' }
>>
>> 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')
>>         record {
>>             type 'speed'
>>             description 'production pickup truck with speed of 271kph'
>>         }
>>     }
>> }
>>
>> assert writer.toString() == '{"records":{"car":{"name":"HSV Maloo","homepage":"http://groovy-lang.org"}}}'
>>
>>
>> ------------------------------
>> Research Associate
>> Department of Computer Science
>> Vassar College
>> Poughkeepsie, NY
>>
>>
>>
>> ------------------------------
>> Research Associate
>> Department of Computer Science
>> Vassar College
>> Poughkeepsie, NY
>>
>>
>
>
> --
> Guillaume Laforge
> Apache Groovy committer & PMC Vice-President
> Developer Advocate @ Google Cloud Platform
>
> Blog: http://glaforge.appspot.com/
> Social: @glaforge <http://twitter.com/glaforge> / Google+
> <https://plus.google.com/u/0/114130972232398734985/posts>
>

Mime
View raw message