Reputation: 11949
Could someone please suggest why this is happening...
I’ve got some code to pretty print some JSON. To do this, I am making use out of the Gson library.
However, while thus usually works well, some characters don’t seem to be displayed properly. Here is a simple piece of code that demonstrates the problem:
//Creating the JSON object, and getting as String:
JsonObject json = new JsonObject();
JsonObject inner = new JsonObject();
inner.addProperty("value", "xpath('hello')");
json.add("root", inner);
System.out.println(json.toString());
//Trying to pretify JSON String:
Gson gson = new GsonBuilder().setPrettyPrinting().create();
JsonParser parser = new JsonParser();
JsonElement je = parser.parse(json.toString());
System.out.println(gson.toJson(je));
The output of the above code is:
{"root":{"value":"xpath('hello')"}}
{
"root": {
"value": "xpath(\u0027hello\u0027)"
}
}
How could I fix the above?
Upvotes: 18
Views: 17007
Reputation: 15719
Use this code, to create Gson
object:
Gson gs = new GsonBuilder()
.setPrettyPrinting()
.disableHtmlEscaping()
.create();
The disableHtmlEscaping()
method tells gson
not to escape HTML characters such as <
, >
, &
, =
, and a single quote which caused you trouble: '
.
Note, that this may cause trouble, if you render such unescaped JSON into a <script/> tag
in HTML page without using additional <![CDATA[ ... ]]>
tag.
You can see how it works, and what other chars are escaped, by looking into the code of JsonWriter
class.
Upvotes: 33