Проблемы с использованием Gson для красивой печати строки JSON

Может кто-нибудь подсказать, пожалуйста, почему это происходит ...

У меня есть некоторый код, чтобы напечатать немного 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() методtells gson не экранировать символы HTML, такие как<, >, &, =и единственная цитата, которая доставила вам неприятности:'.

Обратите внимание, что это может вызвать проблемы, если вы рендерите такой неэкранированный JSON в<script/> tag на HTML-странице без использования дополнительных<![CDATA[ ... ]]> тег.

Вы можете увидеть, как это работает, и какие другие символы экранированы, заглянув в кодJsonWriter class.

Ваш ответ на вопрос