Строка в JSONObject и обратно в строку без потери кодировки UTF-8 - PullRequest
0 голосов
/ 24 января 2019

У меня есть следующее result в String

{
   "html_attributions" : [],
   "result" : {
      "opening_hours" : {
         "open_now" : true,
         "weekday_text" : [
            "Monday: 8:00 AM – 7:00 PM",
            "Tuesday: 8:00 AM – 7:00 PM",
            "Wednesday: 8:00 AM – 2:30 PM",
            "Thursday: 8:00 AM – 7:00 PM",
            "Friday: 8:00 AM – 7:30 PM",
            "Saturday: 8:00 AM – 6:00 PM",
            "Sunday: Closed"
         ]
      }
   },
   "status" : "OK"
}

который я конвертирую в JSONObject используя

JSONObject resultJSON = new JSONObject(result);

Я хочу получить значение внутреннего ключа weekday_text, но похоже, что окончательный вывод не в UTF-8 (вместо этого появляются \u2013 символы юникода):

System.out.println(resultJSON.getJSONObject("result").getJSONObject("opening_hours").getJSONArray("weekday_text").toString());

["Monday: 8:00 AM \u2013 7:00 PM","Tuesday: 8:00 AM \u2013 7:00 PM","Wednesday: 8:00 AM \u2013 2:30 PM","Thursday: 8:00 AM \u2013 7:00 PM","Friday: 8:00 AM \u2013 7:30 PM","Saturday: 8:00 AM \u2013 6:00 PM","Sunday: Closed"]

Что мне здесь не хватает?

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Вы можете использовать OutputStreamWriter для управления выходной кодировкой.

JSONObject resultJSON = new JSONObject(result);    
ByteArrayOutputStream out = new ByteArrayOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(out, "utf-8");
resultJSON.write(writer);
writer.flush();

String jSONStringUTF8 = new String(out.toByteArray(),"utf-8");
JSONObject newJSON = new JSONObject(jSONStringUTF8);
String value = newJSON.getString("content");
0 голосов
/ 24 января 2019

Вы видите escape-последовательности Юникода из-за того, как реализовано toString.Это реализовано таким образом, вероятно, чтобы прояснить, какие символы находятся в строке, что облегчает отладку вашего кода, потому что иногда разные точки кода могут выглядеть очень похожими.

Фактические строки по-прежнему не экранированы.Печать отдельных строк в массиве не будет отображать escape-последовательности:

System.out.println(resultJSON.getJSONObject("result").getJSONObject("opening_hours").getJSONArray("weekday_text").getString(0));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...