Выключите выход UTF в JsonBuilder
Я пытаюсь использовать JsonBuilder в groovy servlet (расширение HttpServlet) Вот фрагмент:
public void doGet(HttpServletRequest request, HttpServletResponse response) {
response.setContentType('text/plain')
response.setCharacterEncoding('utf-8')
def pw = response.getWriter()
pw.println(new JsonBuilder(['city': 'Москва']))
pw.println([сity: 'Москва'])
}
выход
{"city":"u041Cu043Eu0441u043Au0432u0430"}
{сity=Москва}
Я просто ничего не знаю о побеге UTF в JsonBuilder, googling также не дал мне ничего ценного. Так что, похоже, я застрял.
кто-нибудь знает, как получить вывод для json точно в той же форме, в какой мы получаем вывод для обычного объекта groovy?
3 ответов
что касается JavaScript и / или JSON, это is точно такой же выход.
вы можете легко подтвердить это сами:
'Москва' == '\u041c\u043e\u0441\u043a\u0432\u0430'; // true
как вы видите escape-последовательности строк Unicode, которые определены спецификацией ECMAScript (JavaScript) и разрешены в JSON как хорошо.
тем не менее, я бы не беспокоился об этом слишком много, но если вы настаиваете на отключении строки escapes, вы можно использовать
я столкнулся с той же проблемой, и вышеуказанные методы не работали. Однако это сделало: http://groovy.codehaus.org/gapi/groovy/json/StringEscapeUtils.html
StringEscapeUtils.unescapeJavaScript(JsonOutput.toJson('Москва'))
Я нашел его, я нашел его.
Поэтому, если вы так же упрямы, как я, и не хотите признавать, что (в очень широком диапазоне приложений) экранированная последовательность точно такая же, как и не-побег, вы можете просто использовать JsonOuput
объект, который находится в том же стандартном пакете, groovy.XML.*:
JsonOutput.prettyPrint(json.toString())
Если чей-то ответ будет более подробным, я удалю свой собственный ответ и отмечу другой ответ как принятый. Так что я вас ободряю)))