[ https://issues.apache.org/jira/browse/GROOVY-8916?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16718505#comment-16718505 ]
Paul King commented on GROOVY-8916: ----------------------------------- One of the properties of the Locale class is the "default" Locale. Hence, that object serializes into: {code} {"loc":{"script":"","ISO3Country":"FRA","localeExtensions":null,"ISO3Language":"fra","displayCountry":"France", "default":{"script":"","ISO3Country":"AUS","localeExtensions":null,"ISO3Language":"eng","displayCountry":"Australia", "default":{"script":"","ISO3Country":"AUS","localeExtensions":null,"ISO3Language": ... {code} Rather than trying to handle cases like this, in Groovy 2.5 we added the ability to customize JSON generation. You can look at the 2.5 release notes or view this blog here: http://mrhaki.blogspot.com/2018/06/groovy-goodness-customizing-json-output.html In your case you can do: {code} import groovy.json.* def generator = new JsonGenerator.Options() .addConverter(Locale) { Locale loc -> loc.toString() } .build() println generator.toJson([loc: Locale.FRANCE]) // => {"loc":"fr_FR"} {code} > JsonOutput unable to serialize Locale object > -------------------------------------------- > > Key: GROOVY-8916 > URL: https://issues.apache.org/jira/browse/GROOVY-8916 > Project: Groovy > Issue Type: Bug > Components: groovy-runtime > Affects Versions: 2.4.15 > Reporter: Sébastien Gadot > Priority: Minor > > Trying to serialize an object containing a Locale throws > StackOverflowException > example : > > > {code:java} > JsonOutput.toJson([loc: Locale.FRANCE]) > // expected {"loc": "fr_FR"} > // got StackOverflowException > {code} > {code:java} > java.lang.StackOverflowError > at > java.lang.reflect.InvocationTargetException.<init>(InvocationTargetException.java:72) > at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:498) > at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:98) > at groovy.lang.MetaBeanProperty.getProperty(MetaBeanProperty.java:59) > at groovy.lang.PropertyValue.getValue(PropertyValue.java:42) > at > org.codehaus.groovy.runtime.DefaultGroovyMethods.getProperties(DefaultGroovyMethods.java:474) > at groovy.json.JsonOutput.getObjectProperties(JsonOutput.java:338) > at groovy.json.JsonOutput.writeObject(JsonOutput.java:331) > at groovy.json.JsonOutput.writeMap(JsonOutput.java:469) > at groovy.json.JsonOutput.writeObject(JsonOutput.java:332) > at groovy.json.JsonOutput.writeMap(JsonOutput.java:469) > {code} > -- This message was sent by Atlassian JIRA (v7.6.3#76005)