我有一个文件夹,其中包含数千个文本文件,其中包含我需要读取的 JSON 内容,将其转换为 POJO,然后保存到 MySQL 数据库中。我打算使用 Spring Batch 应用程序。
这是到目前为止的问题,我所做的研究仅显示读取多个 CSV 文件或 XML 文件,而没有 JSON 数据。具体来说,我需要将这个用于解析 CSV 文件的方法转换为 JSON 解析器。
@Bean
public FlatFileItemReader<Person> reader() {
FlatFileItemReader<Person> reader = new FlatFileItemReader<Person>();
reader.setLineMapper(new DefaultLineMapper<Person>() {{
setLineTokenizer(new DelimitedLineTokenizer() {{
setNames(new String[] {"firstname", "lastname", "email", "age"});
}});
setFieldSetMapper(new BeanWrapperFieldSetMapper<Person>() {{
setTargetType(Person.class);
}});
}});
return reader;
}
此代码解析 JSON 文件:
JSONParser parser = new JSONParser();
Object obj = parser.parse(new FileReader("C:\\path\\sample.json"));
方法可能是这样的
@Bean
Public FileReader<Person> reader() {
FileReader<Person> reader = new FileReader<Person>();
/**** need help on what to do here ****/
return reader;
}
还看到我正在读取目录中的所有文件,我正在以这种格式传递该目录的值
@Value(value="C:\\path\\*.json")
private Resource[] resources;
因此,我需要有关如何使用此值(所有文件的目录)而不是我之前显示的值(单个文件位置)的帮助
Object obj = parser.parse(new FileReader("C:\\path\\sample.json"));
最佳答案
您可以使用 MultiResourceItemReader
和 JsonItemReader
作为委托(delegate)。这是一个简单的例子:
@Bean
public JsonItemReader<Person> jsonItemReader(Resource[] resources) {
JsonItemReader<Person> delegate = new JsonItemReaderBuilder<Person>()
.jsonObjectReader(new JacksonJsonObjectReader<>(Person.class))
.name("personItemReader")
.build();
MultiResourceItemReader<Person> reader = new MultiResourceItemReader<Person>();
reader.setDelegate(delegate);
reader.setResources(resources);
return reader;
}
您可以在 reference documentation 中找到有关 JsonItemReader
的更多详细信息。 .
希望这有帮助。
关于java - Spring Boot 批处理读取多个 Json 文件并转换为 POJO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54102645/