我正在创建一个程序,据此我需要将对象保存(写入)到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文件,然后能够将其读回程序的最简单方法是什么?
答案 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();
}
注意:我的假设是
board
是Board
类的对象toString()
中适当地覆盖了Board
方法,以便System.out.println(board);
将显示board
的详细信息。