gpt4 book ai didi

java - 为集合中的每个元素调用 JsonGenerator 方法

转载 作者:行者123 更新时间:2023-11-30 06:07:33 24 4
gpt4 key购买 nike

我有一个可以使用 JsonGenerator 将产品对象写入文件的方法。(产品转JSON)

我想使用第二种方法使用 JsonGenerator 流将 HashSet 中的所有产品写入 JSON 文件。我相信打开和关闭流有问题(该文件仅包含最后一个产品)。因此,我可以在第二种方法中打开和关闭流,但第一种方法将不再适用于 1 个产品。

请告诉我:

  1. 是否可以使用两种方法完成我想要的事情?
  2. 有更好的方法吗?
public void productToJSON(Product product, String fileName) throws Exception {
JsonFactory jsonFactory = new JsonFactory();
FileOutputStream file = new FileOutputStream(fileName);
JsonGenerator jsonGen = jsonFactory.createJsonGenerator(file, JsonEncoding.UTF8);
jsonGen.setPrettyPrinter(new DefaultPrettyPrinter());

jsonGen.writeStartObject();
jsonGen.writeStringField("name", product.getName());
jsonGen.writeNumberField("weight", product.getWeight());
jsonGen.writeNumberField("stock", product.getStock());
jsonGen.writeNumberField("price", product.getPrice());
jsonGen.writeNumberField("rating", product.getRating());
jsonGen.writeEndObject();
jsonGen.close();
}

public void productsToJSON(String fileName) throws Exception {
for (Product p : this.products) {
this.productToJSON(p, fileName);
}
}

最佳答案

方法一 - 始终调用 productsToJSON:

private void productToJSON(Product product, JsonGenerator jsonGen) throws Exception {
jsonGen.writeStartObject();
jsonGen.writeStringField("name", product.getName());
jsonGen.writeNumberField("weight", product.getWeight());
jsonGen.writeNumberField("stock", product.getStock());
jsonGen.writeNumberField("price", product.getPrice());
jsonGen.writeNumberField("rating", product.getRating());
jsonGen.writeEndObject();
}

public void productsToJSON(String fileName) throws Exception {
JsonFactory jsonFactory = new JsonFactory();
FileOutputStream file = new FileOutputStream(fileName);
JsonGenerator jsonGen = jsonFactory.createJsonGenerator(file, JsonEncoding.UTF8);
jsonGen.setPrettyPrinter(new DefaultPrettyPrinter());
if (this.products.size > 1) {
jsonGen.writeStartArray(this.products.size)
}
for (Product p: this.products) {
this.productToJSON(p, jsonGen);
}
if (this.products.size > 1) {
jsonGen.writeEndArray()
}
jsonGen.close();
}

方法二 - 一种私有(private)方法和两种公共(public)方法:

private void productToJSON(Product product, JsonGenerator jsonGen) throws Exception {
jsonGen.writeStartObject();
jsonGen.writeStringField("name", product.getName());
jsonGen.writeNumberField("weight", product.getWeight());
jsonGen.writeNumberField("stock", product.getStock());
jsonGen.writeNumberField("price", product.getPrice());
jsonGen.writeNumberField("rating", product.getRating());
jsonGen.writeEndObject();
}

public void productsToJSON(String fileName) throws Exception {
JsonFactory jsonFactory = new JsonFactory();
FileOutputStream file = new FileOutputStream(fileName);
JsonGenerator jsonGen = jsonFactory.createJsonGenerator(file, JsonEncoding.UTF8);
jsonGen.setPrettyPrinter(new DefaultPrettyPrinter());
jsonGen.writeStartArray(this.products.size)
for (Product p: this.products) {
this.productToJSON(p, jsonGen);
}
jsonGen.writeEndArray()
jsonGen.close();
}

public void productToJSON(Product p, String fileName) throws Exception {
JsonFactory jsonFactory = new JsonFactory();
FileOutputStream file = new FileOutputStream(fileName);
JsonGenerator jsonGen = jsonFactory.createJsonGenerator(file, JsonEncoding.UTF8);
jsonGen.setPrettyPrinter(new DefaultPrettyPrinter());
this.productToJSON(p, jsonGen);
jsonGen.close();
}

关于java - 为集合中的每个元素调用 JsonGenerator 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50988038/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com