[ 
https://issues.apache.org/jira/browse/GROOVY-11314?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Denis Jakupovic updated GROOVY-11314:
-------------------------------------
    Description: 
Hi,

the groovy.json package is widely used.
[https://github.com/apache/groovy/blob/master/subprojects/groovy-json/src/main/java/groovy/json/JsonOutput.java]
 

If we use the toPrettyString function the json is being escaped. 
{code:java}
JsonBuilder Class:
public String toPrettyString() {
  return JsonOutput.prettyPrint(toString());
} {code}
However, we can construct a JsonBuilder with JsonGenerator and 
disableUnicodeEscaping. The JsonOutput object uses the DefaultJsonGenerator 
with enabled unicode escaping. We need an option here and another logic in the 
prettyPrint function see here:
{code:java}
case STRING:
  String textStr = token.getText();
  String textWithoutQuotes = textStr.substring(1, textStr.length() - 1);
  if (textWithoutQuotes.length() > 0) {
    output.addJsonEscapedString(textWithoutQuotes);
  } else {
    output.addQuoted(Chr.array());
  }
  break; {code}
If the JsonBuilder is constructed with a JsonGenerator it should be constructed 
with JsonOuput as well and the prettyPrint function shall not add escaped 
strings. 

Currently there is no way to prettyPrint a json with the groovy.json classes 
without having escaped characters in the generated json. 

Best

Denis

  was:
Hi,

the groovy.json package is widely used.
[https://github.com/apache/groovy/blob/master/subprojects/groovy-json/src/main/java/groovy/json/JsonOutput.java]
 

If we use the toPrettyString function the json is being escaped. 
{code:java}
JsonBuilder Class:
public String toPrettyString() {
  return JsonOutput.prettyPrint(toString());
} {code}
However, we can construct a JsonBuilder with JsonGenerator and 
disableUnicodeEscaping. The JsonOutput object uses the DefaultJsonGenerator 
with enabled unicode escaping. We need an option here and another logic in the 
prettyPrint function see here:
{code:java}
case STRING:
 String textStr = token.getText();
 String textWithoutQuotes = textStr.substring(1, textStr.length() - 1);
 if (textWithoutQuotes.length() > 0) {
   output.addJsonEscapedString(textWithoutQuotes);
 } else {
   output.addQuoted(Chr.array());
 }
break; {code}
If the JsonBuilder is constructed with a JsonGenerator it should be constructed 
with JsonOuput as well and the prettyPrint function shall not add escaped 
strings. 

Currently there is no way to prettyPrint a json with the groovy.json classes 
without having escaped characters in the generated json. 

Best

Denis


> JsonOutput Pretty Print always escapes characters
> -------------------------------------------------
>
>                 Key: GROOVY-11314
>                 URL: https://issues.apache.org/jira/browse/GROOVY-11314
>             Project: Groovy
>          Issue Type: Bug
>          Components: JSON
>    Affects Versions: 3.0.19
>            Reporter: Denis Jakupovic
>            Priority: Major
>
> Hi,
> the groovy.json package is widely used.
> [https://github.com/apache/groovy/blob/master/subprojects/groovy-json/src/main/java/groovy/json/JsonOutput.java]
>  
> If we use the toPrettyString function the json is being escaped. 
> {code:java}
> JsonBuilder Class:
> public String toPrettyString() {
>   return JsonOutput.prettyPrint(toString());
> } {code}
> However, we can construct a JsonBuilder with JsonGenerator and 
> disableUnicodeEscaping. The JsonOutput object uses the DefaultJsonGenerator 
> with enabled unicode escaping. We need an option here and another logic in 
> the prettyPrint function see here:
> {code:java}
> case STRING:
>   String textStr = token.getText();
>   String textWithoutQuotes = textStr.substring(1, textStr.length() - 1);
>   if (textWithoutQuotes.length() > 0) {
>     output.addJsonEscapedString(textWithoutQuotes);
>   } else {
>     output.addQuoted(Chr.array());
>   }
>   break; {code}
> If the JsonBuilder is constructed with a JsonGenerator it should be 
> constructed with JsonOuput as well and the prettyPrint function shall not add 
> escaped strings. 
> Currently there is no way to prettyPrint a json with the groovy.json classes 
> without having escaped characters in the generated json. 
> Best
> Denis



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to