Search code examples
javastreamjacksoninputstreamobjectmapper

Read multiple JSON files from a folder into a map


For a given folder path, I want to load/transform all the JSON files inside that folder in a single map.

InputStream input = new ClassPathResource(jsonFile).getInputStream();
jsonMap = new ObjectMapper().readValue(input,
    new TypeReference<Map<String, MappedContacts>>() {});

I've managed to do it for a single file, but I'm not sure how can I do this efficiently for multiple files.


Solution

  • Since I'm using Spring, it was quite easy to use PathMatchingResourcePatternResolver to retrieve all the resources from a folder before using ObjectMapper to transform each one of them into a map :

    PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(ConfigMapping.class.getClassLoader());
    
    Resource[] resources = resolver.getResources("classpath*:/META-INF/resources/mapper/*");
    
    for (Resource resource: resources) {
     InputStream input = resource.getInputStream();
     Map < String, MappedContacts> jsonMap = new ObjectMapper().readValue(input, new TypeReference < Map < String, MappedContacts>> () {});
     mapping.putAll(jsonMap);
    }