开发者社区> 问答> 正文

我正在尝试在Java上使用gson将大量自定义对象写入json文件,但是在文件完成之前它会中断吗?

我正在制作一个java程序,从mtgjson读取数据,将每个卡保存为一个自定义类,然后使用gson将所有这些卡写入另一个json文件。(我发现使用gson无法从mtgjson中读取数据,但使用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's motion sensor”,它是特定集合的最后一张卡,但不是按字母顺序排列的最后一张。mtgcard类存储每个卡的许多属性,如名称和文本。输出json的结尾如下所示: 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写入限制的任何内容,但找不到任何内容。另外,我试图使代码从另一点开始,或阅读一个较小的部分,但它仍然会被任意截断。

展开
收起
小六码奴 2019-10-14 18:05:39 7157 0
1 条回答
写回答
取消 提交回答
  • 在程序中的缓冲区被刷新到操作系统之前,程序退出。你应该刷新写入程序或正确关闭它。

    2019-10-14 18:06:34
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载