Spark Java-将csv中的json转换为map



我有一个CSV文件,大约有30列,其中一列是json字符串。我想做的是读取csv并将json分解为行(分解(。

例如:CSV:

"data1,date1,{"USERS-1":"ff", "name1":"Joe1", "age":"1"},1" 
"data2,date2,{"USERS-2":"ff", "name2":"Joe2", "age":"2"},2" 
"data3,date3,{"USERS-3":"ff", "name3":"Joe3", "age":"3"},3" 

之后的结果:

"data1,date1,"USERS-1","ff",1"
"data1,date1,"name1","Joe1",1"
"data1,date1,"age","1",1"
"data2,date2,"USERS-2","ff",2"
"data2,date2,"name2","Joe1",2"
"data2,date2,"age","2",2"
"data3,date3,"USERS-3","ff",3"
"data3,date3,"name3","Joe1",3"
"data3,date3,"age","3",3"

我不是在用scala写作。

Json是无组织的!

Joe!我写了一节课,向你展示我将如何处理你的问题。在代码之后,我将为您提供额外的详细信息,以便您更好地了解代码的作用。

public class MMM {
public static void main(String[] args) {
String s = "data1,date1,{"USERS-1":"ff", "name1":"Joe1", "age":"1"},1";
processLine(s);
}
public static void processLine(String s) {
final String dates = s.split("[{]")[0];
final String content = s.split("[{]")[1];
final List<String> elements = Arrays.stream(content.split("[,}]")).map(String::trim).filter(x -> !x.isEmpty())
.collect(Collectors.toList());
String result = dates;
for (int i = 0; i < elements.size() - 1; i++) {
result += elements.get(i);
result += elements.get(elements.size() - 1);
System.out.println(result);
result = dates;
}
}
}

基本上,代码所做的是将从CSV读取的一行拆分为两部分,即括号之间的日期和内容。内容将被再次拆分、修剪,以便删除在字符串末尾发现的",并且空字符串将被过滤掉。我们现在有了一个关于我们的元素列表。为了更好地可视化方法,我决定打印结果。您可以很容易地修改代码,以便将它们返回到列表或任何您可能喜欢的内容中。我希望我的回答有帮助,祝你今天愉快!

最新更新