diff --git a/src/main/java/com/ankurm/jackson3/part1objectmapper/B02ReadJson.java b/src/main/java/com/ankurm/jackson3/part1objectmapper/B02ReadJson.java new file mode 100644 index 0000000..c7f803a --- /dev/null +++ b/src/main/java/com/ankurm/jackson3/part1objectmapper/B02ReadJson.java @@ -0,0 +1,49 @@ +package com.ankurm.jackson3.part1objectmapper; + +import tools.jackson.databind.json.JsonMapper; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.util.List; + +/** + * Post: Jackson ObjectMapper Guide — https://ankurm.com/jackson-objectmapper-guide/ + * Section: "Deserialising JSON to Java Objects" + * + * Reading from a String, a File and an InputStream. + * + * The post also shows readValue(new URL(...), ...). That overload is deliberately + * NOT reproduced here: it performs a live network call, which would make this + * example non-reproducible. The InputStream form below is what a real HTTP client + * hands you anyway. + */ +public class B02ReadJson { + + public record Article(Long articleId, String title, List tags) { } + + public static void main(String[] args) throws Exception { + JsonMapper mapper = JsonMapper.builder().build(); + + String json = "{\"articleId\":1,\"title\":\"Jackson Deep Dive\",\"tags\":[\"java\",\"json\"]}"; + + // 1. Read from a String + Article fromString = mapper.readValue(json, Article.class); + System.out.println("from String : " + fromString.title()); + + // 2. Read from a File + File file = File.createTempFile("article", ".json"); + Files.writeString(file.toPath(), json); + Article fromFile = mapper.readValue(file, Article.class); + System.out.println("from File : " + fromFile.articleId()); + + // 3. Read from an InputStream + try (var in = new ByteArrayInputStream(json.getBytes(StandardCharsets.UTF_8))) { + Article fromStream = mapper.readValue(in, Article.class); + System.out.println("from Stream : " + fromStream.tags()); + } + + file.deleteOnExit(); + } +}