Skip to content

Commit 810d703

Browse files
authored
Bael 5191 json node get all keys (eugenp#11486)
* BAEL-5191-JsonNode-Get-All-Keys-From-A-Json-Structure * Added test cases for GetAllKeysFromJSON class methods * Updated test class name * BAEL - 5191 - Updated exception handling
1 parent fc438ba commit 810d703

2 files changed

Lines changed: 77 additions & 85 deletions

File tree

jackson-modules/jackson/src/main/java/com/baeldung/jackson/jsonnode/GetAllKeysFromJSON.java

Lines changed: 36 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -8,33 +8,27 @@
88
import java.util.Map.Entry;
99

1010
import com.fasterxml.jackson.core.JsonFactory;
11+
import com.fasterxml.jackson.core.JsonParseException;
1112
import com.fasterxml.jackson.core.JsonParser;
1213
import com.fasterxml.jackson.core.JsonProcessingException;
1314
import com.fasterxml.jackson.core.JsonToken;
1415
import com.fasterxml.jackson.core.type.TypeReference;
16+
import com.fasterxml.jackson.databind.JsonMappingException;
1517
import com.fasterxml.jackson.databind.JsonNode;
1618
import com.fasterxml.jackson.databind.ObjectMapper;
1719
import com.fasterxml.jackson.databind.node.ArrayNode;
1820

1921
public class GetAllKeysFromJSON {
2022

21-
public static List<String> getKeysInJsonUsingMaps(String json, ObjectMapper mapper) {
23+
public List<String> getKeysInJsonUsingMaps(String json, ObjectMapper mapper) throws JsonMappingException, JsonProcessingException {
2224
List<String> keys = new ArrayList<>();
23-
24-
try {
25-
Map<String, Object> jsonElements = mapper.readValue(json, new TypeReference<Map<String, Object>>() {
26-
});
27-
getAllKeys(jsonElements, keys);
28-
return keys;
29-
30-
} catch (JsonProcessingException e) {
31-
e.printStackTrace();
32-
}
33-
25+
Map<String, Object> jsonElements = mapper.readValue(json, new TypeReference<Map<String, Object>>() {
26+
});
27+
getAllKeys(jsonElements, keys);
3428
return keys;
3529
}
3630

37-
public static void getAllKeys(Map<String, Object> jsonElements, List<String> keys) {
31+
private void getAllKeys(Map<String, Object> jsonElements, List<String> keys) {
3832

3933
jsonElements.entrySet()
4034
.forEach(entry -> {
@@ -54,51 +48,35 @@ public static void getAllKeys(Map<String, Object> jsonElements, List<String> key
5448
});
5549
}
5650

57-
public static List<String> getKeysInJsonUsingJsonNodeFieldNames(String json, ObjectMapper mapper) {
58-
List<String> keys = new ArrayList<>();
59-
60-
try {
61-
JsonNode jsonNode = mapper.readTree(json);
62-
Iterator<String> iterator = jsonNode.fieldNames();
63-
iterator.forEachRemaining(e -> keys.add(e));
51+
public List<String> getKeysInJsonUsingJsonNodeFieldNames(String json, ObjectMapper mapper) throws JsonMappingException, JsonProcessingException {
6452

65-
} catch (JsonProcessingException e) {
66-
e.printStackTrace();
67-
}
53+
List<String> keys = new ArrayList<>();
54+
JsonNode jsonNode = mapper.readTree(json);
55+
Iterator<String> iterator = jsonNode.fieldNames();
56+
iterator.forEachRemaining(e -> keys.add(e));
6857
return keys;
6958
}
7059

71-
public static List<String> getAllKeysInJsonUsingJsonNodeFieldNames(String json, ObjectMapper mapper) {
72-
List<String> keys = new ArrayList<>();
73-
74-
try {
75-
JsonNode jsonNode = mapper.readTree(json);
76-
getAllKeysUsingJsonNodeFieldNames(jsonNode, keys);
60+
public List<String> getAllKeysInJsonUsingJsonNodeFieldNames(String json, ObjectMapper mapper) throws JsonMappingException, JsonProcessingException {
7761

78-
} catch (JsonProcessingException e) {
79-
e.printStackTrace();
80-
}
62+
List<String> keys = new ArrayList<>();
63+
JsonNode jsonNode = mapper.readTree(json);
64+
getAllKeysUsingJsonNodeFieldNames(jsonNode, keys);
8165
return keys;
8266
}
8367

84-
public static List<String> getAllKeysInJsonUsingJsonNodeFields(String json, ObjectMapper mapper) {
85-
List<String> keys = new ArrayList<>();
68+
public List<String> getAllKeysInJsonUsingJsonNodeFields(String json, ObjectMapper mapper) throws JsonMappingException, JsonProcessingException {
8669

87-
try {
88-
JsonNode jsonNode = mapper.readTree(json);
89-
getAllKeysUsingJsonNodeFields(jsonNode, keys);
90-
91-
} catch (JsonProcessingException e) {
92-
e.printStackTrace();
93-
}
70+
List<String> keys = new ArrayList<>();
71+
JsonNode jsonNode = mapper.readTree(json);
72+
getAllKeysUsingJsonNodeFields(jsonNode, keys);
9473
return keys;
9574
}
9675

97-
public static void getAllKeysUsingJsonNodeFields(JsonNode jsonNode, List<String> keys) {
76+
private void getAllKeysUsingJsonNodeFields(JsonNode jsonNode, List<String> keys) {
9877

9978
if (jsonNode.isObject()) {
10079
Iterator<Entry<String, JsonNode>> fields = jsonNode.fields();
101-
10280
fields.forEachRemaining(field -> {
10381
keys.add(field.getKey());
10482
getAllKeysUsingJsonNodeFieldNames((JsonNode) field.getValue(), keys);
@@ -112,11 +90,10 @@ public static void getAllKeysUsingJsonNodeFields(JsonNode jsonNode, List<String>
11290

11391
}
11492

115-
public static void getAllKeysUsingJsonNodeFieldNames(JsonNode jsonNode, List<String> keys) {
93+
private void getAllKeysUsingJsonNodeFieldNames(JsonNode jsonNode, List<String> keys) {
11694

11795
if (jsonNode.isObject()) {
11896
Iterator<String> fieldNames = jsonNode.fieldNames();
119-
12097
fieldNames.forEachRemaining(fieldName -> {
12198
keys.add(fieldName);
12299
getAllKeysUsingJsonNodeFieldNames(jsonNode.get(fieldName), keys);
@@ -130,43 +107,29 @@ public static void getAllKeysUsingJsonNodeFieldNames(JsonNode jsonNode, List<Str
130107

131108
}
132109

133-
public static List<String> getKeysInJsonUsingJsonParser(String json, ObjectMapper mapper) {
134-
List<String> keys = new ArrayList<>();
110+
public List<String> getKeysInJsonUsingJsonParser(String json, ObjectMapper mapper) throws IOException {
135111

136-
try {
137-
JsonNode jsonNode = mapper.readTree(json);
138-
JsonParser jsonParser = jsonNode.traverse();
139-
while (!jsonParser.isClosed()) {
140-
if (jsonParser.nextToken() == JsonToken.FIELD_NAME) {
141-
keys.add((jsonParser.getCurrentName()));
142-
}
112+
List<String> keys = new ArrayList<>();
113+
JsonNode jsonNode = mapper.readTree(json);
114+
JsonParser jsonParser = jsonNode.traverse();
115+
while (!jsonParser.isClosed()) {
116+
if (jsonParser.nextToken() == JsonToken.FIELD_NAME) {
117+
keys.add((jsonParser.getCurrentName()));
143118
}
144-
} catch (JsonProcessingException e) {
145-
e.printStackTrace();
146-
} catch (IOException e) {
147-
e.printStackTrace();
148119
}
149-
150120
return keys;
151121
}
152122

153-
public static List<String> getKeysInJsonUsingJsonParser(String json) {
154-
List<String> keys = new ArrayList<>();
123+
public List<String> getKeysInJsonUsingJsonParser(String json) throws JsonParseException, IOException {
155124

156-
try {
157-
JsonFactory factory = new JsonFactory();
158-
JsonParser jsonParser = factory.createParser(json);
159-
while (!jsonParser.isClosed()) {
160-
if (jsonParser.nextToken() == JsonToken.FIELD_NAME) {
161-
keys.add((jsonParser.getCurrentName()));
162-
}
125+
List<String> keys = new ArrayList<>();
126+
JsonFactory factory = new JsonFactory();
127+
JsonParser jsonParser = factory.createParser(json);
128+
while (!jsonParser.isClosed()) {
129+
if (jsonParser.nextToken() == JsonToken.FIELD_NAME) {
130+
keys.add((jsonParser.getCurrentName()));
163131
}
164-
} catch (JsonProcessingException e) {
165-
e.printStackTrace();
166-
} catch (IOException e) {
167-
e.printStackTrace();
168132
}
169-
170133
return keys;
171134
}
172135
}

jackson-modules/jackson/src/test/java/com/baeldung/jackson/jsonnode/GetAllKeysFromJSONUnitTest.java

Lines changed: 41 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@
22

33
import static org.junit.jupiter.api.Assertions.assertEquals;
44

5+
import java.io.IOException;
56
import java.util.List;
67

78
import org.junit.jupiter.api.Test;
89

10+
import com.fasterxml.jackson.core.JsonProcessingException;
911
import com.fasterxml.jackson.databind.ObjectMapper;
1012

1113
public class GetAllKeysFromJSONUnitTest {
@@ -16,41 +18,68 @@ public class GetAllKeysFromJSONUnitTest {
1618
+ " }\r\n" + " ]\r\n" + " }\r\n" + "}";
1719

1820
private static ObjectMapper mapper = new ObjectMapper();
21+
private static GetAllKeysFromJSON getAllKeysFromJSONUtil = new GetAllKeysFromJSON();
1922

2023
// Top level keys : [Name, Age, BookInterests, FoodInterests]
2124
// All keys: [Name, Age, BookInterests, Book, Author, Book, Author, FoodInterests, Breakfast, Bread, Beverage, Sandwich, Beverage]
2225

2326
@Test
2427
public void givenAJsonNode_whenUsingFieldNamesMethod_thenWeGetTopFieldNames() {
25-
List<String> keys = GetAllKeysFromJSON.getKeysInJsonUsingJsonNodeFieldNames(json, mapper);
26-
assertEquals(4, keys.size());
28+
List<String> keys;
29+
try {
30+
keys = getAllKeysFromJSONUtil.getKeysInJsonUsingJsonNodeFieldNames(json, mapper);
31+
assertEquals(4, keys.size());
32+
} catch (JsonProcessingException e) {
33+
e.printStackTrace();
34+
}
2735
}
2836

2937
@Test
3038
public void givenAJsonNode_whenUsingFieldNamesMethodForAllNodes_thenWeGetAllFieldNames() {
31-
List<String> keys = GetAllKeysFromJSON.getAllKeysInJsonUsingJsonNodeFieldNames(json, mapper);
32-
assertEquals(13, keys.size());
39+
List<String> keys;
40+
try {
41+
keys = getAllKeysFromJSONUtil.getAllKeysInJsonUsingJsonNodeFieldNames(json, mapper);
42+
assertEquals(13, keys.size());
43+
} catch (JsonProcessingException e) {
44+
e.printStackTrace();
45+
}
3346
}
3447

3548
@Test
3649
public void givenAJsonNode_whenUsingFieldsMethod_thenWeGetAllFieldNames() {
37-
List<String> keys = GetAllKeysFromJSON.getAllKeysInJsonUsingJsonNodeFields(json, mapper);
38-
assertEquals(13, keys.size());
50+
List<String> keys;
51+
try {
52+
keys = getAllKeysFromJSONUtil.getAllKeysInJsonUsingJsonNodeFields(json, mapper);
53+
assertEquals(13, keys.size());
54+
} catch (JsonProcessingException e) {
55+
e.printStackTrace();
56+
}
3957
}
4058

4159
@Test
4260
public void givenAJsonNode_whenUsingJsonParserMethod_thenWeGetAllFieldNames() {
43-
List<String> keys = GetAllKeysFromJSON.getKeysInJsonUsingJsonParser(json, mapper);
44-
assertEquals(13, keys.size());
61+
List<String> keys;
62+
try {
63+
keys = getAllKeysFromJSONUtil.getKeysInJsonUsingJsonParser(json, mapper);
64+
assertEquals(13, keys.size());
65+
66+
keys = getAllKeysFromJSONUtil.getKeysInJsonUsingJsonParser(json);
67+
assertEquals(13, keys.size());
68+
} catch (IOException e) {
69+
e.printStackTrace();
70+
}
4571

46-
keys = GetAllKeysFromJSON.getKeysInJsonUsingJsonParser(json);
47-
assertEquals(13, keys.size());
4872
}
4973

5074
@Test
5175
public void givenAJsonNode_whenUsingMaps_thenWeGetAllFieldNames() {
52-
List<String> keys = GetAllKeysFromJSON.getKeysInJsonUsingMaps(json, mapper);
53-
assertEquals(13, keys.size());
76+
List<String> keys;
77+
try {
78+
keys = getAllKeysFromJSONUtil.getKeysInJsonUsingMaps(json, mapper);
79+
assertEquals(13, keys.size());
80+
} catch (JsonProcessingException e) {
81+
e.printStackTrace();
82+
}
5483
}
5584

5685
}

0 commit comments

Comments
 (0)