gpt4 book ai didi

java - 使用与 gson 的 csv-headers 不同的属性名称将 csv-table 映射到 json 的简单方法?

转载 作者:行者123 更新时间:2023-11-30 01:55:48 24 4
gpt4 key购买 nike

我有一些 csv 文件,我想将其转换为 json。不幸的是,csv 的结构与所需的 json 格式不匹配。 a) 因为csv是扁平结构,而json应该是嵌套结构。 b) 因为列标题与 json 属性名称不匹配。

说明最小的 CSV 示例:

ColumnNameX,ColumnNameY,ColumnNameZ
valueX,valueY,valueZ

应转换为以下 JSON:

{
"XZObject": {
"absurdlyNotNamedLikeCsvHeading": "valueX",
"AlsoNOTColumnNameZ": "valueZ" },
"YyyyyWhy": {
"ThisResemblesColumnNameY": "valueY"
}

我会天真地去制作一些代表 POJO 类,并按位置放入值 - 就像这样(伪代码):

class Container {Fields:XZObject,YyyyyWhy}
class XZObject {Fields:absurdlyNotNamedLikeCsvHeading,AlsoNOTColumnNameZ}
class YyyyyWhy {Fields:ThisResemblesColumnNameY}

new XZObject(absurdlyNotNamedLikeCsvHeading=csvLineElements[0],AlsoNOTColumnNameZ=csvLineElements[2])
new YyyyyWhy(ThisResemblesColumnNameY=csvLineElement[1])
new Container(XZObject,YyyyyWhy)

...然后我将使用 gson 将 Container 对象转换为 JSON。

问题是,当 CSV 中的字段添加到方案中时,我必须调整新列之后的每个位置映射。

所以我想知道:是否有一种简单的方法可以通过标题将 CSV 列映射到特定的 JSON 属性?最好与 gson-lib 一起使用。

换句话说:我可以将列中的值映射到标题 "ColumnNameZ" 中吗?到属性(property)"XZobject.AlsoNOTColumnNameZ"用简单的方法吗?

最佳答案

我认为将 CSV 文件解析为对象是最好的方法。

您可以先读取第一列,将其拆分并在运行时计算每列的索引。那么添加/删除或随机排列列并不重要

假设您阅读了第一行并且您已经

String firstRow = "ColumnNameX,ColumnNameY,ColumnNameZ";

这样解析:

List<String> columnList = Arrays.asList(firstRow.split(","));
int COLUMN_NAME_X_INDEX = columnList.indexOf("ColumnNameX");
int COLUMN_NAME_Y_INDEX = columnList.indexOf("ColumnNameY");
int COLUMN_NAME_Z_INDEX = columnList.indexOf("ColumnNameZ");

而不是使用新发现的索引:

XZObject xzObject = new XZObject(csvLineElements[COLUMN_NAME_X_INDEX], csvLineElements[COLUMN_NAME_Z_INDEX]);
YyyyyWhy yyyyyWhy = new YyyyyWhy(csvLineElements[COLUMN_NAME_Y_INDEX]);
Container container = new Container(XZObject,YyyyyWhy);

关于java - 使用与 gson 的 csv-headers 不同的属性名称将 csv-table 映射到 json 的简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54557093/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com