csv转JSON再转Object List的方法

第一步,从.csv文件读取数据,转成JSON格式
 1 import com.fasterxml.jackson.dataformat.csv.CsvMapper;
 2 import com.fasterxml.jackson.dataformat.csv.CsvSchema;
 3 import com.google.gson.Gson;
 4  
 5 public static String readFile(String filename) throws Exception {
 6 
 7         String filetype = filename.substring(filename.lastIndexOf(".") + 1);
 8         String filepath = "src/main/java/"+ filename;
 9         String json = null;
10 
11         if (filetype.equals("csv")) {
12             
13             File input = new File(filepath);
14             CsvSchema csvSchema = CsvSchema.builder().setUseHeader(true).build();
15             CsvMapper csvMapper = new CsvMapper();
16 
17             // Read data from CSV file
18             List<Object> readAll = csvMapper.readerFor(Map.class)
19           .with(csvSchema).readValues(input).readAll();
20             Gson objJson = new Gson();
21             json = objJson.toJson(readAll, List.class);
22         }
23         return json;
24     }
 
第二步,创建Object类
 1 import com.fasterxml.jackson.annotation.JsonProperty;
 2 
 3 public class User {
 4     
 5     @JsonProperty("Userid")
 6     private String Userid;
 7     
 8     @JsonProperty("FirstName")
 9     private String FirstName;
10     
11     @JsonProperty("LastName")
12     private String LastName;
13   
14    public String getUserId() {
15         return Userid;
16     }
17     
18     public String getFirstName() {
19         return FirstName;
20     }
21     
22     public String getLastName() {
23         return LastName;
24     }
25    
26     public void setUserId(String Userid) {
27         this.Userid = Userid;
28     }
29     
30     public void setFirstName(String FirstName) {
31         this.FirstName = FirstName;
32     }
33 
34     public void setLastName(String LastName) {
35         this.LastName = LastName;
36     }
37 }
 
第三步,将JSON字符串转化为Object List
 1 import com.fasterxml.jackson.databind.ObjectMapper;
 2  
 3 public static List<User> jsonToUserEntity(String json) {
 4         ObjectMapper objectMapper = new ObjectMapper();
 5 
 6         try {
 7            return objectMapper.readValue(
 8                    json,
 9            objectMapper.getTypeFactory().constructCollectionType(List.class, User.class)
10             );
11 
12         } catch (IOException e) {
13             e.printStackTrace();
14         }
15         return new ArrayList<User>();
16     }

 

补充:
如果CSV文件的第一行是Column名,而你想要自定义它们,可以用下面的方法
1 CsvSchema csvSchema = CsvSchema.builder().setSkipFirstDataRow(true)
2                     .addColumn("userId")
3                     .addColumn("firstName")
4                     .build()
 
如果CSV文件本身没有分列,只是按行存放了数据内容(第一行还是Column名),则可以用下面的方法
 1 CsvSchema schema = CsvSchema.builder().setColumnSeparator(',').setSkipFirstDataRow(true).build();
 2  MappingIterator<String[]> it = csvMapper.readerFor(String[].class).with(schema).readValues(input);
 3  
 4 List<String> recordList = new ArrayList<String>();
 5  
 6 while (it.hasNext()) {
 7                 String[] arr = it.next();
 8                 String record = "";
 9                 for (int i=0; i<arr.length; i++) {
10                    //arr[i]存放了一个单元格的内容,把一行中所有的单元格连起来就是一个完整的record
11                     if (arr[i] != "") {
12                         record = record + arr[i];
13                     }
14                 }
15                 recordList.add(record);
16             }
 
 

 

 
 
posted @ 2019-02-10 15:36  wangclwh  阅读(1491)  评论(0编辑  收藏  举报