java - 将包含 ArrayList 的对象的 ArrayList 写入 CSV
问题描述
我的任务是从网页中抓取数据并将它们与其他信息一起写入 CSV。目前我使用 JSoup 来抓取网站,但我的问题是不确定如何将它们写入 CSV。
我将每个抓取页面的数据存储在一个对象调用 CSVObject 中:
public class CSVObject {
String name;
String title;
String description;
String ArrayList<String> color;
String ArrayList<String> size;
String ArrayList<float> price;
}
我将这些对象存储在ArrayList<CSVObject>
名称、标题、描述来自抓取的数据,但颜色、尺寸和价格来自用户输入。他们可以选择多个,它将添加到对象中的 ArrayList 中。
所需的文件输出是这样的:
Name Title Description Color Size Price
Shirt Holiday Shirt Shirt Description Black S 15.99
Shirt Black M 19.99
Shirt Black L 24.99
Shirt Green S 15.99
Shirt Green M 19.99
Shirt Green L 24.99
Pants Movie Pants Pants Description Red S 17.99
...
我做了一些挖掘并在如何将对象序列化为 CSV 文件中找到了Java CSV 库?可以帮助将文件写入 CSV,但我不确定如何将其格式化为所需的输出。那么我应该怎么做才能按预期编写文件呢?
解决方案
平面文件
逗号分隔值 (CSV)和制表符分隔格式适用于平面文件,每个格式都有一个表格。这意味着一组行都共享同一组列。
要导出示例数据中的数据,请重复您已抑制的第一列中的值。然后,您将拥有一组共享同一组列的行。
等级制度
根据您的 Java 类,您有一个data 层次结构。这不适合 CSV 格式。方钉,圆孔。
为了匹配 Java 类的结构,您应该以XML或 JSON 等分层格式序列化数据。
不是真正的 CSV
如果您坚持使用您展示的那种不是真正的 CSV 格式,则需要嵌套循环。
循环您的一组对象。对于每个对象,循环其中包含的列表。
在第一次浏览列表时,写出所有列。对于内部循环中的后续时间,抑制这些值,仅写入一个逗号字符以保持列数。
直截了当的逻辑,没有什么棘手的,遵循与将这些值手写到纸上时相同的步骤。
当然,任何包含分隔符(COMMA 等)的字段值都必须用引号引起来。或者只是将所有字段括在引号中。
推荐阅读
- python - 为什么这个函数的 __dict__ 属性是一个空字典?
- linux - 在 Fedora 上调用 GNOME 失败对话框的可执行文件在哪里?
- scheduled-tasks - 如何使用 Quartz 安排作业在一天内多次但固定的时间运行
- z3 - 有人可以帮助在 SMT 求解器 Z3 中对这个函数(多项式函数)进行建模吗?
- flutter - 检查是否连接到 WiFi(即使没有互联网)或移动数据
- git - VS2019:推送到远程存储库时遇到错误:Git 失败并出现致命错误。无法访问
- javascript - 如何获取上一页点击按钮的值
- reactjs - React TypeScript:如何将多个文件设置为状态?
- node.js - 在浏览器中与在 Node 应用程序上使用 JSRender 的“空传播运算符”之间的区别
- javascript - 异步消息还是(消息)?- 不和谐.js