我有大约 30 列的 CSV 文件,其中一列是 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 是非结构化的!
最佳答案
乔!我写了一个类,目的是向您展示我将如何解决您的问题。在代码之后,我将向您提供额外的详细信息,以便您更好地理解代码的作用。
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 读取的一行分成两部分:日期和括号之间的内容。内容被再次分割、修剪,以删除字符串末尾的“”,并过滤掉空字符串。现在我们有了一份与我们相关的要素列表。为了更好地可视化该方法的作用,我决定打印结果。您可以轻松修改代码,以便将它们返回到列表或您可能喜欢的任何内容中。希望我的回答对您有所帮助,祝您有美好的一天!
关于java - Spark Java - 将 csv 内的 json 转换为 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53525519/