java - 如何在 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 文件然后能够将其读回我的程序中的最简单方法是什么?
解决方案
如果您只是想以 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());
印刷:
香蕉
推荐阅读
- javascript - 验证用户是否存在或不使用 nodejs
- javascript - 如何绘制 geoAlbersUsa() 投影的经纬度坐标?
- c# - 这个依赖注入 (DI) 服务在注册为瞬态时如何维护数据?
- python - 如何避免 div 在使用 Python/Selenium 抓取动态生成的网站时清空自己?
- flutter - Visual Studio Code Flutter 无法更新 Dart SDK
- html - 当页面在文档片段处重新加载时,Bootstrap 5 Scrollspy 设置了不正确的活动部分
- google-sheets - 添加基于年份的动态下拉列表以更改 Google 表格查询的结果
- c# - 多少内存使用字节枚举,这是否优化了 C# 中的内存/速度?
- python - 使用 Python 将 pdf 数据转换为 JSON 格式?
- javascript - 使用 Axios 和 Pipe Function 执行 POST 方法