Выключите выход 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())

Если чей-то ответ будет более подробным, я удалю свой собственный ответ и отмечу другой ответ как принятый. Так что я вас ободряю)))