Проблемы с использованием Gson для красивой печати JSON String
Может кто-нибудь спросит, почему это происходит...
У меня есть некоторый код, чтобы довольно печатать некоторые JSON. Для этого я использую библиотеку Gson.
Однако, хотя, как правило, работает хорошо, некоторые символы не отображаются должным образом. Вот простой фрагмент кода, который демонстрирует проблему:
//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));
Вывод вышеуказанного кода:
{"root":{"value":"xpath('hello')"}}
{
"root": {
"value": "xpath(\u0027hello\u0027)"
}
}
Как я могу исправить выше?
Ответы
Ответ 1
Используйте этот код для создания объекта Gson
:
Gson gs = new GsonBuilder()
.setPrettyPrinting()
.disableHtmlEscaping()
.create();
Метод disableHtmlEscaping()
сообщает Gson
не выводить символы HTML, такие как <
, >
, &
, =
и одну цитату, которая вызвала у вас проблемы: '
.
Обратите внимание, что это может вызвать проблемы, если вы вынесете такой unescaped JSON в <script/> tag
на странице HTML без использования дополнительного тега <![CDATA[ ... ]]>
.
Вы можете увидеть, как это работает, и какие другие символы экранированы, просмотрев код JsonWriter
class.