【问题标题】:Writing JSONArray to file, only writes first collection of values将 JSONArray 写入文件,仅写入第一个值集合
【发布时间】:2019-09-07 14:24:23
【问题描述】:

执行以下代码时,print函数打印jsonarray中的所有元素,但是writer,只打印第一个元素集合。

到目前为止,我已经尝试了代码中显示的内容,另外还遍历了列表

public class FileWrapper {

    public static void WriteRelease(String filename, ArrayList<Object> list) throws IOException, JSONException{

        File file = new File(filename);
        FileWriter filew = new FileWriter(filename);  
        JSONArray jsonarray = new JSONArray();

        //System.out.println(jsonarray.put(list).toString());
        jsonarray.add(list);
        System.out.println(jsonarray);
        jsonarray.writeJSONString(jsonarray,filew);
        filew.close();
    }
}

我要写在文件中的输出和标准输出一样:

[[标题 - 阿姆回归状态 - 盗版语言 - eng ReleaseDate - 2004-09-28 格式 - CD Track Count - 11]] [[Title - Eminem 演出状态 - 官方语言 - eng ReleaseDate - 2002 格式 - Digital Media Track Count - 20]] [[Title - The Eminem Show 状态 - 官方语言 - eng ReleaseDate - 2002 格式 - 数字媒体轨道计数 - 19]]

再一次,写的只是这样:

[[标题 - 阿姆回归状态 - 盗版语言 - eng ReleaseDate - 2004-09-28 格式 - CD Track Count - 11]]

【问题讨论】:

  • 向我们展示 print 方法以及如何调用这两种方法。尝试以追加模式打开文件new FileWriter(filename, true);
  • @SatyaTNV 比我想象的要简单
  • 你的标准输出我是这么想的。

标签: java arrays json object arraylist


【解决方案1】:

请检查我的解决方案: App.java class

// JSON解析器对象解析读取文件 JSONParser jsonParser = new JSONParser();

try {
            URL resource = App.class.getClassLoader().getResource("info.json");
            System.out.println(resource.toString());
            FileReader reader = new FileReader(resource.getFile());

            // Read JSON file
            Object obj = jsonParser.parse(reader);

            JSONArray infoList = (JSONArray) obj;
            System.out.println(infoList);

            Information i = new Information();

            List<Information> info = i.parseInformationObject(infoList);

            saveInformation(info);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();

        } catch (IOException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            e.printStackTrace();
        }

并迭代: Information.java class

List<Information> parseInformationObject(JSONArray infoList) {
        List<Information> in = new ArrayList<>();

        infoList.forEach(emp -> {

            JSONObject info = (JSONObject) emp;

            String id = info.get("id").toString();
            String state = info.get("state").toString();
            String type = null;
            if (info.get("type") != null) {
                type = info.get("type").toString();
            }
            String host = null;
            if (info.get("host") != null) {
                host = info.get("host").toString();
            }
            long timestamp = (long) info.get("timestamp");

            in.add(new Information(id, state, type, host, timestamp));

        });
        return in;
    }

【讨论】:

    【解决方案2】:

    试试这个

    try (PrintWriter pw = new PrintWriter(writer)) {
      pw.println(jsonArray.toString());
    }
    

    我不确定JSONArray类的写作

    【讨论】:

      【解决方案3】:

      事实证明,解决方法很简单,正如 @SatyaTNV 所指出的,唯一需要更改的是 Filewriter 行

      通过添加

      new FileWriter(filename, true)
      

      一切都打印得很好!感谢 SatyaTNV!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-09
        • 1970-01-01
        • 2021-01-19
        • 1970-01-01
        • 2021-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多