java - 将 JSONArray 写入文件,仅写入第一个值集合
问题描述
执行以下代码时,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();
}
}
我要写入文件的输出与标准输出相同:
[[Title - Eminem 回归状态 - 盗版语言 - eng ReleaseDate - 2004-09-28 格式 - CD Track Count - 11]] [[Title - Eminem 演出状态 - 官方语言 - eng ReleaseDate - 2002 格式 - 数字媒体轨道Count - 20]] [[Title - The Eminem Show Status - 官方语言 - eng ReleaseDate - 2002 格式 - Digital Media Track Count - 19]]
同样,写的只是这样:
[[标题 - 阿姆回归状态 - 盗版语言 - eng ReleaseDate - 2004-09-28 格式 - CD Track Count - 11]]
解决方案
请检查我的解决方案: App.java 类
// 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 类
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;
}
推荐阅读
- selenium - Kotlin、Cucumber 和 Selenium - Kotlin 无法与元素交互
- laravel - Laravel 批量邮件队列(按数量和时间划分)
- c++ - 如何按升序对输入文件中的数字进行排序,并找到它们的范围和中位数?
- r - 变量的打印输出
- java - 当我尝试将一个对象添加到一个 ArrayList 中时,它会添加哈希码,不知道如何解决。初学者
- python - struct.error: unpack_from 需要至少 4 个字节的缓冲区
- r - 在选择中使用多个条件(dplyr)
- forms - SilverStripe 3 UserForms - 未发送或未接收的电子邮件。如何解决问题
- perl - 从输入文件中提取匹配模式并在 Perl 中打印到输出文件
- dependency-injection - UserDefaults 中的 Swift 应用程序全局变量