groovy-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Graeme Rocher <graeme.roc...@gmail.com>
Subject Re: JsonOutput serialization options feature
Date Fri, 23 Sep 2016 09:15:41 GMT
Great, yeah that would be a big help, since efficiency over the wire
for JSON services is a big deal and the unicode escaping doesn't help
there.

Also, can we consider https://github.com/apache/groovy/pull/429 as an
improvement? Again it makes using StreamingJsonBuilder more efficient
and maintainable.

Thanks

On Fri, Sep 23, 2016 at 1:11 AM, John Wagenleitner
<john.wagenleitner@gmail.com> wrote:
> On Wed, Sep 21, 2016 at 3:22 AM, Graeme Rocher <graeme.rocher@gmail.com>
> wrote:
>>
>> Hi John,
>>
>> Looks very useful, so +1
>>
>> One thing that would also be useful is to be able to configure the
>> ability to disable unicode encoding. It doesn't seem to be recommended
>> for all circumstances. See:
>>
>>
>> http://stackoverflow.com/questions/12271547/shouldnt-json-stringify-escape-unicode-characters?noredirect=1&lq=1
>>
>> And it is blocking resolution of this issue:
>>
>> https://github.com/grails/grails-views/issues/71
>>
>> Thoughts?
>
>
>
> Hi Graeme,
>
> Good suggestion, and also seems to be a requested feature in GROOVY-6975
> [1].  So seems worthwhile to add a disableUnicodeEscaping or
> disableNonAsciiEscaping option.  I'll see if I can add that to the PR soon.
>
>
> [1] https://issues.apache.org/jira/browse/GROOVY-6975
>
>
>
>
>>
>>
>> On Mon, Sep 12, 2016 at 12:02 AM, John Wagenleitner
>> <john.wagenleitner@gmail.com> wrote:
>> > On Sun, Sep 11, 2016 at 11:51 AM, Kostas Saidis <saikos@gmail.com>
>> > wrote:
>> >>
>> >> +1, definitely!
>> >>
>> >> If it is possible, the dateFormat method should also accept an optional
>> >> Locale parameter (as mentioned in TODO comment in the source), with a
>> >> default value of Locale.US.
>> >>
>> >> Cheers,
>> >> Kostas
>> >>
>> >
>> >
>> > Thanks for pointing that out, I had forgot about that.  I added a new
>> > method
>> > that accepts both a date format string and Locale.
>> >
>> >
>> >>
>> >>
>> >> On 11/9/2016 6:59 πμ, John Wagenleitner 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"}}}'
>> >>
>> >>
>> >
>>
>>
>>
>> --
>> Graeme Rocher
>
>



-- 
Graeme Rocher

Mime
View raw message