首页 > 解决方案 > 如何在 Java 中将对象写入 JSON 文件?

问题描述

我正在创建一个程序,我需要将对象保存(写入)到 JSON,然后将这些对象加载(读取)回程序中。我告诉过 GSON 是一个很好的方法来做到这一点。但是,我遇到了一些麻烦。我尝试了以下方法:

Gson g = new Gson();
try (FileWriter writer = new FileWriter(file)) {
    String j = g.toJson(board);
    writer.write(j);  
    writer.flush();  
    writer.close();
} catch (IOException e) {
    e.printStackTrace();
}

当我运行程序时,我收到错误:

class object3 声明了多个名为 state 的 JSON 字段

我试图写入 JSON 的对象有一个 ID,以及另一个对象 ( object2) 的数组,并且这些对象中的每一个都有另一个对象 ( object3) 的数组。object3有多个字段,主要是字符串。对我来说,将诸如此类的对象写入 JSON 文件然后能够将其读回我的程序中的最简单方法是什么?

标签: javajsonobjectgsonfilewriter

解决方案


如果您只是想以 JSON 格式序列化和反序列化对象状态,并且不太关心 JSON 的确切形状,XStream使这变得非常容易。它几乎可以容忍任何 Java 对象结构,并且不像 Gson 那样挑剔。

它最初设计用于序列化为 XML,但如果您使用JettisonMappedXmlDriver它,它将改为输出 JSON。我发现它是一个编写良好且可靠的库。

Product product = new Product("Banana", "123", 23.00);
XStream xstream = new XStream(new JettisonMappedXmlDriver());
xstream.setMode(XStream.NO_REFERENCES);
xstream.alias("product", Product.class);

System.out.println(xstream.toXML(product));

产生:

{"product":{"name":"Banana","id":123,"price":23.0}}

要读回它:

XStream xstream = new XStream(new JettisonMappedXmlDriver());
xstream.alias("product", Product.class);
Product product = (Product) xstream.fromXML(json);
System.out.println(product.getName());

印刷:

香蕉


推荐阅读