【问题标题】:Only last record is being written to the json File when I am trying to write every record in the same file当我尝试将每条记录写入同一个文件时,只有最后一条记录被写入 json 文件
【发布时间】:2021-02-28 12:47:28
【问题描述】:

我调试后发现文件在每次迭代后都会被重写。

此外,如果我不关闭文件,则不会将任何内容写入文件。我正在使用 BufferedWriter - 我们需要明确关闭文件还是由它来处理?

这是我的代码:

        JSONArray jsonArr = new JSONArray(myrecords);
        for (int i = 0; i < jsonArr.length(); i++) {
            JSONObject jsonObj = jsonArr.getJSONObject(i);
            System.out.println(jsonObj);
            BufferedWriter writer = new BufferedWriter(new FileWriter("JsonFilenew.json"));
            writer.write(jsonObj.toString());
            String records = new String(Files.readAllBytes(Paths.get("JsonFilenew.json")));
            JFlat flatMe = new JFlat(records);
       
            flatMe.json2Sheet().headerSeparator().getJsonAsSheet();
            file.close();
            flatMe.write2csv("new.csv");

        }

【问题讨论】:

    标签: java json file filewriter bufferedwriter


    【解决方案1】:

    据我了解,您的代码有两个问题:

    1. 如果您使用不带第二个参数的 FileWriter,它将破坏原始文件 - 如果您想附加到文件,请尝试 new FileWriter("JsonFilenew.json",true)
    2. 我认为您读取文件并将其作为平面 json 写回的代码应该在循环之外,因为这应该只执行一次。

    更多: 您的另一个问题是,将大量 json 文件粘贴在一起并不能生成合法的 json。您需要将其设为合法的 json 数组(即用 '[' 打开;每个元素用 ',' 分隔,并用 ']' 关闭

    【讨论】:

    • 感谢@Elemental,将第二个参数添加为 true 确实附加了文件,但它显示 -- 使用 JsonReader.setLenient(true) 在第 1 行第 883 列路径接受格式错误的 JSON --- myRecords 是具有正确的 json 格式,在转换为 jsonArray 时是否有问题导致此错误
    • 在我的回答中添加了更多内容
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-24
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 2020-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多