Quantcast
Channel: User Chris - Stack Overflow
Viewing all articles
Browse latest Browse all 39

Jackson deserialise JSON with many dynamic nodes

$
0
0

I'm trying to deserialize a JSON file with the format of

{"English": {"hex": "FF0000"  },"Spanish": {"hex": "0000FF"  },"Japanese": {"hex": "FFFF00"  }}

But I don't want to create a class for each language (thousands) so I wrote a custom LanguageDeserializer which gives me back the List<Language> that I want

static class LanguageDeserializer extends StdDeserializer<ArrayList<Language>> {//...@Overridepublic ArrayList<Language> deserialize(final JsonParser jp, final DeserializationContext ctxt) throws IOException {    final JsonNode node = jp.getCodec().readTree(jp);    final Iterator<Map.Entry<String, JsonNode>> nodes = node.fields();    final ArrayList<Language> results = new ArrayList<>();    while (nodes.hasNext()) {        // Builds up the object from the nodes        results.add(builder.build());    }    return results;}

I have a parent class to wrap the results:

public class LanguageWrapper {    @JsonDeserialize(using = Language.LanguageDeserializer.class)    public List<Language> languages = new ArrayList<>();}

So when I try and use it

final LanguageWrapper languageWrapper = objectMapper.readValue(new ClassPathResource("data/languages.json").getFile(), LanguageWrapper.class);

The languages list is always empty.

Can I do this without needing the LanguageDeserializer or how do I make it work?


Viewing all articles
Browse latest Browse all 39

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>