为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

青春有我 2021-04-08 14:15:08
我有一种方法,可以使用JsonGenerator将产品对象写入文件。(productToJSON)我想使用第二种方法,使用JsonGenerator流将HashSet中的所有产品写入JSON文件。我相信打开和关闭流(文件仅包含最后一个产品)存在问题。因此,我可以使用第二种方法打开和关闭流,但是第一种方法不再适用于一种产品。请告诉我:是否可以使用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);    }}
查看完整描述

2 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

方法一-始终调用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 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();

}


查看完整回答
反对 回复 2021-04-21
?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

您可以使用ObjectMapper从Java Object创建一个json。[以及POJO中的Setter-Getter方法]。使用DefaultPrettyPrinter创建ObjectWriter。


注意:无需在JsonGenerator中设置属性。喜欢,


jsonGen.writeStringField("name", product.getName());

请参考以下示例。


    import java.io.File;

    import java.util.ArrayList;

    import java.util.List;

    import com.fasterxml.jackson.core.util.DefaultPrettyPrinter;

    import com.fasterxml.jackson.databind.ObjectMapper;

    import com.fasterxml.jackson.databind.ObjectWriter;


    public class Demo {

        public static void main(String[] args) throws Exception {

            List<Product> list = new ArrayList<Product>();

            list.add(new Product("Sample Product", 123012));

            list.add(new Product("Sample 1 Product 1", 2134));

            list.add(new Product("Sample 1 Product 2", 4353));

            list.add(new Product("Sample 1 Product 3", 34345));

            productsToJSON(list, "Test.txt");

        }


        private static void productsToJSON(List<Product> products, String fileName) throws Exception {

            ObjectMapper mapper = new ObjectMapper();

            ObjectWriter writer = mapper.writer(new DefaultPrettyPrinter());

            writer.writeValue(new File(fileName), products);

        }

    }


    class Product {

        private String name;

        private Integer weight;


        public Product(String name, Integer weight) {

            this.name = name;

            this.weight = weight;

        }


        public String getName() {

            return name;

        }


        public void setName(String name) {

            this.name = name;

        }


        public Integer getWeight() {

            return weight;

        }


        public void setWeight(Integer weight) {

            this.weight = weight;

        }

    }

输出:


    [ {

      "name" : "Sample Product",

      "weight" : 123012

    }, {

      "name" : "Sample1 Product1",

      "weight" : 123012

    } ]


查看完整回答
反对 回复 2021-04-21
  • 2 回答
  • 0 关注
  • 202 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信