Выключите UTF, выходящий в JsonBuilder - PullRequest
11 голосов
/ 21 марта 2012

Я пытаюсь использовать JsonBuilder в отличном сервлете (расширяющий 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":"\u041C\u043E\u0441\u043A\u0432\u0430"}
{сity=Москва}

Я просто ничего не знаюо том, что UTF сбежал в JsonBuilder, поиск в Google также не дал мне ничего ценного.Так что, думаю, я застрял.

Кто-нибудь знает, как получить вывод для json точно в той же форме, как мы получаем вывод для обычного объекта groovy?

Ответы [ 3 ]

18 голосов
/ 30 мая 2014

Я столкнулся с той же проблемой, и вышеуказанные методы не работали. Однако это сделало: http://groovy.codehaus.org/gapi/groovy/json/StringEscapeUtils.html

StringEscapeUtils.unescapeJavaScript(JsonOutput.toJson('Москва'))
4 голосов
/ 21 марта 2012

Что касается JavaScript и / или JSON, то - это точно такой же вывод.

Вы можете легко подтвердить это самостоятельно :

'Москва' == '\u041c\u043e\u0441\u043a\u0432\u0430'; // true

Вы видите escape-последовательности строк Unicode , которые определены спецификацией ECMAScript (JavaScript) и также допускаются в JSON .

Тем не менее, я бы не стал сильно беспокоиться об этом, но если вы настаиваете на отключении экранирования строки, вы можете использовать объект JsonOutput:

JsonOutput.prettyPrint(json.toString());
0 голосов
/ 21 марта 2012

Я нашел это, я нашел это. Поэтому, если вы так же упрямы, как и я, и не хотите признавать, что (в очень широком диапазоне приложений) экранированная последовательность точно такая же, как и не экранированная, вы можете просто использовать объект JsonOuput, который находится в том же стандартная упаковка, groovy.xml. *:

JsonOutput.prettyPrint(json.toString())

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...