Ввод
Новая строка JSON с разделителями, пример:
{"summersolstice":"21st June, 2019", //complex objects, arrays, etc ... }
{"summersolstice":"21st June, 2018", //complex objects, arrays, etc ... }
{"summersolstice":"21st June, 2017", //complex objects, arrays, etc ... }
Ограничение
Хотя я понимаю, что лучший способ - использовать новые блестящие устройства для чтения элементов JSONвыпущенная прошлым летом ( ссылка ), обновить пакетную версию до последней пока не представляется возможным.Это единственное ограничение.
Настоящий подход
На данный момент я следовал этому стековому ответу, но я не думаю, что T
для FlatFileItemReader
1018 * - лучшая стратегия!На данный момент я просто принимаю его с помощью этого кода:
public class JsonItemReader extends FlatFileItemReader<Map<String, Object>> {
public JsonItemReader(File file) {
Resource resource = new BzipLazyResource(file); //on the fly unzipping
setResource(resource);
setLineMapper(new JsonLineMapper());
}
public JsonItemReader(String sourceFileName) {
this(new File(sourceFileName));
}
}
... и затем анализирую его просто в ItemProcessor, например:
public class JsonItemProcessor implements ItemProcessor<Map<String, Object>, List<Json>> {
private ObjectMapper mapper = new ObjectMapper();
private static final Logger logger = LoggerFactory.getLogger(JsonItemProcessor.class);
public List<Json> process(Map<String, Object> jsonItem) throws Exception {
JsonNode jsonNode = mapper.valueToTree(jsonItem);
return parseJsonItems(jsonNode);
}
Ресурсы: