Как мне разобрать файл json с помощью gson? - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь прочитать определенные строки из большого файла json, используя gson. проблема в том, что код, который я написал, не будет анализировать кодировку utf-8.

Gson gson = new Gson();
    Items[] myItems = gson.fromJson(new FileReader("./input/raw-1.json"), Items[].class);
    System.out.println(gson.toJson(myItems));

Gson gson2 = new GsonBuilder().setPrettyPrinting().create();
    Writer writer = Files.newBufferedWriter(Paths.get("./output/output-sample-test.json"));
    gson2.toJson(myItems, writer);
    writer.close();

class Items {
    long id;
    int dayId;
    String clientAddress;
    String pickupAddress;
    String venueName;
    String pickupTime;
    double pickupLat;
    double pickupLon;
    double deliveryLat;
    double deliveryLon;
}

он выведет эти странные знаки:

"clientAddress": "Timisoara, Strada Gheorghe Lazăr nr. 24, bloc Fructus Plaza, ap. 22, et. 7"

что я делаю неправильно? кстати, извините за мой плохой английский sh. спасибо!

1 Ответ

0 голосов
/ 01 апреля 2020

JSON предполагается кодировать в UTF-8. FileReader предполагает, что файл закодирован в кодировке по умолчанию для текстовых файлов для вашей системы, которые могут не быть UTF-8. Если вы используете Files.newBufferedReader, вы можете указать кодировку:

try (Reader reader = Files.newBufferedReader(Paths.get("./input/raw-1.json"), StandardCharsets.UTF_8)) {
    Items[] myItems = gson.fromJson(reader, Items[].class);
}

Аналогично, вы должны указать кодировку при записи:

try (Writer writer = Files.newBufferedWriter(Paths.get("./output/output-sample-test.json", StandardCharsets.UTF_8)) {
    gson2.toJson(myItems, writer);
}
...