diff --git a/jackson-modules/jackson/src/main/java/com/baeldung/jackson/jsonnode/GetAllKeysFromJSON.java b/jackson-modules/jackson/src/main/java/com/baeldung/jackson/jsonnode/GetAllKeysFromJSON.java index d740b457af..bb8e9a8646 100644 --- a/jackson-modules/jackson/src/main/java/com/baeldung/jackson/jsonnode/GetAllKeysFromJSON.java +++ b/jackson-modules/jackson/src/main/java/com/baeldung/jackson/jsonnode/GetAllKeysFromJSON.java @@ -8,33 +8,27 @@ import java.util.Map; import java.util.Map.Entry; import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonToken; import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ArrayNode; public class GetAllKeysFromJSON { - public static List getKeysInJsonUsingMaps(String json, ObjectMapper mapper) { + public List getKeysInJsonUsingMaps(String json, ObjectMapper mapper) throws JsonMappingException, JsonProcessingException { List keys = new ArrayList<>(); - - try { - Map jsonElements = mapper.readValue(json, new TypeReference>() { - }); - getAllKeys(jsonElements, keys); - return keys; - - } catch (JsonProcessingException e) { - e.printStackTrace(); - } - + Map jsonElements = mapper.readValue(json, new TypeReference>() { + }); + getAllKeys(jsonElements, keys); return keys; } - public static void getAllKeys(Map jsonElements, List keys) { + private void getAllKeys(Map jsonElements, List keys) { jsonElements.entrySet() .forEach(entry -> { @@ -54,51 +48,35 @@ public class GetAllKeysFromJSON { }); } - public static List getKeysInJsonUsingJsonNodeFieldNames(String json, ObjectMapper mapper) { + public List getKeysInJsonUsingJsonNodeFieldNames(String json, ObjectMapper mapper) throws JsonMappingException, JsonProcessingException { + List keys = new ArrayList<>(); - - try { - JsonNode jsonNode = mapper.readTree(json); - Iterator iterator = jsonNode.fieldNames(); - iterator.forEachRemaining(e -> keys.add(e)); - - } catch (JsonProcessingException e) { - e.printStackTrace(); - } + JsonNode jsonNode = mapper.readTree(json); + Iterator iterator = jsonNode.fieldNames(); + iterator.forEachRemaining(e -> keys.add(e)); return keys; } - public static List getAllKeysInJsonUsingJsonNodeFieldNames(String json, ObjectMapper mapper) { + public List getAllKeysInJsonUsingJsonNodeFieldNames(String json, ObjectMapper mapper) throws JsonMappingException, JsonProcessingException { + List keys = new ArrayList<>(); - - try { - JsonNode jsonNode = mapper.readTree(json); - getAllKeysUsingJsonNodeFieldNames(jsonNode, keys); - - } catch (JsonProcessingException e) { - e.printStackTrace(); - } + JsonNode jsonNode = mapper.readTree(json); + getAllKeysUsingJsonNodeFieldNames(jsonNode, keys); return keys; } - public static List getAllKeysInJsonUsingJsonNodeFields(String json, ObjectMapper mapper) { + public List getAllKeysInJsonUsingJsonNodeFields(String json, ObjectMapper mapper) throws JsonMappingException, JsonProcessingException { + List keys = new ArrayList<>(); - - try { - JsonNode jsonNode = mapper.readTree(json); - getAllKeysUsingJsonNodeFields(jsonNode, keys); - - } catch (JsonProcessingException e) { - e.printStackTrace(); - } + JsonNode jsonNode = mapper.readTree(json); + getAllKeysUsingJsonNodeFields(jsonNode, keys); return keys; } - public static void getAllKeysUsingJsonNodeFields(JsonNode jsonNode, List keys) { + private void getAllKeysUsingJsonNodeFields(JsonNode jsonNode, List keys) { if (jsonNode.isObject()) { Iterator> fields = jsonNode.fields(); - fields.forEachRemaining(field -> { keys.add(field.getKey()); getAllKeysUsingJsonNodeFieldNames((JsonNode) field.getValue(), keys); @@ -112,11 +90,10 @@ public class GetAllKeysFromJSON { } - public static void getAllKeysUsingJsonNodeFieldNames(JsonNode jsonNode, List keys) { + private void getAllKeysUsingJsonNodeFieldNames(JsonNode jsonNode, List keys) { if (jsonNode.isObject()) { Iterator fieldNames = jsonNode.fieldNames(); - fieldNames.forEachRemaining(fieldName -> { keys.add(fieldName); getAllKeysUsingJsonNodeFieldNames(jsonNode.get(fieldName), keys); @@ -130,43 +107,29 @@ public class GetAllKeysFromJSON { } - public static List getKeysInJsonUsingJsonParser(String json, ObjectMapper mapper) { + public List getKeysInJsonUsingJsonParser(String json, ObjectMapper mapper) throws IOException { + List keys = new ArrayList<>(); - - try { - JsonNode jsonNode = mapper.readTree(json); - JsonParser jsonParser = jsonNode.traverse(); - while (!jsonParser.isClosed()) { - if (jsonParser.nextToken() == JsonToken.FIELD_NAME) { - keys.add((jsonParser.getCurrentName())); - } + JsonNode jsonNode = mapper.readTree(json); + JsonParser jsonParser = jsonNode.traverse(); + while (!jsonParser.isClosed()) { + if (jsonParser.nextToken() == JsonToken.FIELD_NAME) { + keys.add((jsonParser.getCurrentName())); } - } catch (JsonProcessingException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); } - return keys; } - public static List getKeysInJsonUsingJsonParser(String json) { + public List getKeysInJsonUsingJsonParser(String json) throws JsonParseException, IOException { + List keys = new ArrayList<>(); - - try { - JsonFactory factory = new JsonFactory(); - JsonParser jsonParser = factory.createParser(json); - while (!jsonParser.isClosed()) { - if (jsonParser.nextToken() == JsonToken.FIELD_NAME) { - keys.add((jsonParser.getCurrentName())); - } + JsonFactory factory = new JsonFactory(); + JsonParser jsonParser = factory.createParser(json); + while (!jsonParser.isClosed()) { + if (jsonParser.nextToken() == JsonToken.FIELD_NAME) { + keys.add((jsonParser.getCurrentName())); } - } catch (JsonProcessingException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); } - return keys; } } diff --git a/jackson-modules/jackson/src/test/java/com/baeldung/jackson/jsonnode/GetAllKeysFromJSONUnitTest.java b/jackson-modules/jackson/src/test/java/com/baeldung/jackson/jsonnode/GetAllKeysFromJSONUnitTest.java index b547422aad..5d0558ca63 100644 --- a/jackson-modules/jackson/src/test/java/com/baeldung/jackson/jsonnode/GetAllKeysFromJSONUnitTest.java +++ b/jackson-modules/jackson/src/test/java/com/baeldung/jackson/jsonnode/GetAllKeysFromJSONUnitTest.java @@ -2,10 +2,12 @@ package com.baeldung.jackson.jsonnode; import static org.junit.jupiter.api.Assertions.assertEquals; +import java.io.IOException; import java.util.List; import org.junit.jupiter.api.Test; +import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; public class GetAllKeysFromJSONUnitTest { @@ -16,41 +18,68 @@ public class GetAllKeysFromJSONUnitTest { + " }\r\n" + " ]\r\n" + " }\r\n" + "}"; private static ObjectMapper mapper = new ObjectMapper(); + private static GetAllKeysFromJSON getAllKeysFromJSONUtil = new GetAllKeysFromJSON(); // Top level keys : [Name, Age, BookInterests, FoodInterests] // All keys: [Name, Age, BookInterests, Book, Author, Book, Author, FoodInterests, Breakfast, Bread, Beverage, Sandwich, Beverage] @Test public void givenAJsonNode_whenUsingFieldNamesMethod_thenWeGetTopFieldNames() { - List keys = GetAllKeysFromJSON.getKeysInJsonUsingJsonNodeFieldNames(json, mapper); - assertEquals(4, keys.size()); + List keys; + try { + keys = getAllKeysFromJSONUtil.getKeysInJsonUsingJsonNodeFieldNames(json, mapper); + assertEquals(4, keys.size()); + } catch (JsonProcessingException e) { + e.printStackTrace(); + } } @Test public void givenAJsonNode_whenUsingFieldNamesMethodForAllNodes_thenWeGetAllFieldNames() { - List keys = GetAllKeysFromJSON.getAllKeysInJsonUsingJsonNodeFieldNames(json, mapper); - assertEquals(13, keys.size()); + List keys; + try { + keys = getAllKeysFromJSONUtil.getAllKeysInJsonUsingJsonNodeFieldNames(json, mapper); + assertEquals(13, keys.size()); + } catch (JsonProcessingException e) { + e.printStackTrace(); + } } @Test public void givenAJsonNode_whenUsingFieldsMethod_thenWeGetAllFieldNames() { - List keys = GetAllKeysFromJSON.getAllKeysInJsonUsingJsonNodeFields(json, mapper); - assertEquals(13, keys.size()); + List keys; + try { + keys = getAllKeysFromJSONUtil.getAllKeysInJsonUsingJsonNodeFields(json, mapper); + assertEquals(13, keys.size()); + } catch (JsonProcessingException e) { + e.printStackTrace(); + } } @Test public void givenAJsonNode_whenUsingJsonParserMethod_thenWeGetAllFieldNames() { - List keys = GetAllKeysFromJSON.getKeysInJsonUsingJsonParser(json, mapper); - assertEquals(13, keys.size()); + List keys; + try { + keys = getAllKeysFromJSONUtil.getKeysInJsonUsingJsonParser(json, mapper); + assertEquals(13, keys.size()); + + keys = getAllKeysFromJSONUtil.getKeysInJsonUsingJsonParser(json); + assertEquals(13, keys.size()); + } catch (IOException e) { + e.printStackTrace(); + } - keys = GetAllKeysFromJSON.getKeysInJsonUsingJsonParser(json); - assertEquals(13, keys.size()); } @Test public void givenAJsonNode_whenUsingMaps_thenWeGetAllFieldNames() { - List keys = GetAllKeysFromJSON.getKeysInJsonUsingMaps(json, mapper); - assertEquals(13, keys.size()); + List keys; + try { + keys = getAllKeysFromJSONUtil.getKeysInJsonUsingMaps(json, mapper); + assertEquals(13, keys.size()); + } catch (JsonProcessingException e) { + e.printStackTrace(); + } } }