【问题标题】:How to write an Object to a JSON file in Java?如何在 Java 中将对象写入 JSON 文件?
【发布时间】:2020-03-25 02:18:02
【问题描述】:

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

【问题讨论】:

  • 您是否查看过一些教程,例如this?您可能还想添加您的对象(作为代码示例)。
  • 你能分享你的 JSON 吗?看起来 JSON 本身是无效的,有多个同名的键。
  • 分享我的 JSON 是什么意思?
  • 你能告诉我们你的object3类吗?

标签: java json object gson filewriter


【解决方案1】:

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

打印:

香蕉

【讨论】:

    猜你喜欢
    • 2021-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-27
    • 2013-10-04
    • 1970-01-01
    相关资源
    最近更新 更多