如何在Java中将对象写入JSON文件?

时间:2019-11-29 13:14:15

标签: java json object gson filewriter

我正在创建一个程序,据此我需要将对象保存(写入)到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文件,然后能够将其读回程序的最简单方法是什么?

2 个答案:

答案 0 :(得分:0)

如果您只是想以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());

打印:

  

香蕉

答案 1 :(得分:0)

要写入文件:

Gson gson = new Gson();
try (FileWriter writer = new FileWriter(file)) {
    gson.toJson(board, writer);
} catch (IOException e) {
    e.printStackTrace();
}

要读取文件:

Gson gson = new Gson();
try (Reader reader = new FileReader(file)) {
    Board board = gson.fromJson(reader, Board.class);
    System.out.println(board);
} catch (IOException e) {
    e.printStackTrace();
}

注意:我的假设是

  1. boardBoard类的对象
  2. 您已在toString()中适当地覆盖了Board方法,以便System.out.println(board);将显示board的详细信息。