Я пытаюсь использовать gson на Java для записи большого списка пользовательских объектов в файл json, но он отключается до того, как файл закончится? - PullRequest
0 голосов
/ 14 октября 2019

Я делаю Java-программу для чтения из MTGJson, сохраняя каждую карту как пользовательский класс, а затем записываю все эти карты в другой файл JSON с помощью gson. (Я обнаружил, что не могу читать из mtgjson с помощью gson, но я мог с помощью json.simple.) Кажется, что код читает объекты в странном порядке, затем не сохраняет каждую карточку в списке, затем перед целымСписок написан в формате JSON, он внезапно обрезается. Скачать файл JSON можно здесь. https://www.mtgjson.com/json/AllSets.json

import com.google.gson.Gson;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class DatabaseTrimmer {

    public static void main(String[] args) throws IOException, ParseException {
        JSONObject ALLSETS = (JSONObject) new JSONParser().parse(new FileReader("AllSets.json"));
        List<MTGCard> AllCards = new ArrayList<>();
        for(Object o: ALLSETS.values()) {
            JSONObject set = (JSONObject)o;
            JSONArray cards = (JSONArray) (set.get("cards"));
            for (Object card : cards) {
                MTGCard tempCard = new MTGCard((JSONObject) card);
                if (!tempCard.isReprint) {
                    AllCards.add(tempCard);
                }
            }
        }
        Gson gson = new Gson();
        FileWriter writer = new FileWriter("TrimmedAllSets.json");
        gson.toJson(AllCards, writer);
    }
}

Последней картой, которая будет сохранена в списке AllCards, является «Датчик движения Volrath», которая является последней картой определенного набора, но не последней в алфавитном порядке. Класс MTGCard хранит множество свойств каждой карты, таких как имя и текст. Конец вывода json выглядит так:

"isReprint":false,"printings":["UGL"]},{"name":"Sorry","type":"Enchantment","text":"Before any player casts a spell with the same name as a card in any graveyard, that player may say \"sorry.\" If they don\u0027t, any other player may say \"sorry\" as the spell is being cast. When another player says \"sorry\" this way, counter the spell.\nWhenever a player says \"sorry\" at any other time, Sorry deals 2 damage to that player.","rarity":"uncommon","manaCost":"{U}{U}","artist":"Kaja Foglio","convertedManaCost":2.0,"isFoil":false,"isReprint":false,"printings":["UGL"]},{"name":"Spark Fiend","type":"Creature — Beast","text":"When Spark Fiend enters the battlefield, roll two six-sided dice. If you rolled 2, 3, or 12, sacrifice Spark Fiend. If you rolled 7 or 11, don\u0027t roll dice for Spark Fiend during any of your following upkeeps. If you rolled any other total, note that total.\nAt the beginning of your upkeep, roll two six-sided dice. If you rolled 7, sacrifice Spark Fiend. If you roll the noted total, don\u0027t roll dice for Spark Fiend during any of your 

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

1 Ответ

2 голосов
/ 14 октября 2019

Программа завершается до того, как буфер в записывающем устройстве будет сброшен в операционную систему. Вы должны flush писатель или close () правильно.

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