代码之家  ›  专栏  ›  技术社区  ›  yN.

Spring Batch:如何设置FlatFileItemReader来读取json文件?

  •  2
  • yN.  · 技术社区  · 7 年前

    我目前的做法是:

    @Bean
    FlatFileItemReader<Blub> flatFileItemReader() {
        FlatFileItemReader<Blub> reader = new FlatFileItemReader<>();
    
        reader.setResource(new FileSystemResource("test.json"));
    
        JsonLineMapper lineMapper = new JsonLineMapper();
    
        reader.setLineMapper(lineMapper);
    
        return reader;
    }
    

    reader.setLineMapper() 无法使用 JsonLineMapper . 如何使用 JsonLineMapper 合适吗?

    3 回复  |  直到 7 年前
        1
  •  4
  •   Mahmoud Ben Hassine    6 年前

    如何设置FlatFileItemReader来读取json文件?

    这取决于json文件的格式:

    NDJson )

    例如:

    {object1}
    {object2}
    

    • 1.1使用 JsonLineMapper Map<String, Object> . 在这种情况下,读者也应该返回 映射<字符串,对象> 您可以使用项目处理器从 映射<字符串,对象> Blub (顺便说一下,将数据从一种类型转换为另一种类型是项目处理器的典型用例)
    • 1.2使用自定义实现 LineMapper<Blub> 基于Jackson或Gson或任何其他库(如@clevertension的答案所示)

    2。行包装在json数组中

    [
     {object1},
     {object2}
    ]
    

    然后你可以用新的 JsonItemReader 我们在版本4.1.0.M1中引入的(请参见以下博客文章中的示例: https://spring.io/blog/2018/05/31/spring-batch-4-1-0-m1-released#add-a-new-json-item-reader ).

    有一些类似的问题,我在这里添加它们以供参考:

        2
  •  5
  •   clevertension    7 年前

    创建类 BlubJsonLineMapper公司

    public class BlubJsonLineMapper implements LineMapper<Blub> {
    
        private ObjectMapper mapper = new ObjectMapper();
    
    
        /**
         * Interpret the line as a Json object and create a Blub Entity from it.
         * 
         * @see LineMapper#mapLine(String, int)
         */
        @Override
        public Blub mapLine(String line, int lineNumber) throws Exception {
            return mapper.readValue(line, Blub.class);
        }
    
    }
    

    然后可以在FlatFileItemReader中设置

    @Bean
    FlatFileItemReader<Blub> flatFileItemReader() {
        FlatFileItemReader<Blub> reader = new FlatFileItemReader<>();
    
        reader.setResource(new FileSystemResource("test.json"));
    
        BlubJsonLineMapper lineMapper = new BlubJsonLineMapper();
    
        reader.setLineMapper(lineMapper);
    
        return reader;
    }
    
        3
  •  2
  •   Community Mohan Dere    7 年前

    我已经为Json构建了一个小的演示。如果你需要更多,让我知道我可以为你树立另一个榜样

    https://github.com/bigzidane/spring-batch-jsonListItem-reader