Skip to content

Commit 7a44698

Browse files
authored
Bael 8274 (#17065)
* jsonarry to hashmap * update * change modules * jsonarray to hashmap * rework * change the hashmap datatype
1 parent d024e4f commit 7a44698

File tree

2 files changed

+141
-0
lines changed

2 files changed

+141
-0
lines changed
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package com.baeldung.gson.jsonarraytohashmap;
2+
3+
import java.lang.reflect.Type;
4+
import java.util.HashMap;
5+
import java.util.List;
6+
import java.util.Map;
7+
import java.util.stream.Collectors;
8+
import java.util.stream.StreamSupport;
9+
10+
import com.google.gson.Gson;
11+
import com.google.gson.GsonBuilder;
12+
import com.google.gson.JsonArray;
13+
import com.google.gson.JsonDeserializationContext;
14+
import com.google.gson.JsonDeserializer;
15+
import com.google.gson.JsonElement;
16+
import com.google.gson.JsonObject;
17+
import com.google.gson.JsonParseException;
18+
import com.google.gson.JsonPrimitive;
19+
import com.google.gson.reflect.TypeToken;
20+
21+
public class JSONArrayToHashMapConverter {
22+
public static Map<String, Integer> convertUsingIterative (JsonArray jsonArray) {
23+
Map<String, Integer> hashMap = new HashMap<>();
24+
for (JsonElement element : jsonArray) {
25+
JsonObject jsonObject = element.getAsJsonObject();
26+
String type = jsonObject.get("name").getAsString();
27+
Integer amount = jsonObject.get("age").getAsInt();
28+
hashMap.put(type, amount);
29+
}
30+
return hashMap;
31+
}
32+
33+
public static Map<String, Integer> convertUsingStreams (JsonArray jsonArray) {
34+
return StreamSupport.stream(jsonArray.spliterator(), false)
35+
.map(JsonElement::getAsJsonObject)
36+
.collect(Collectors.toMap(
37+
jsonObject -> jsonObject.get("name").getAsString(),
38+
jsonObject -> jsonObject.get("age").getAsInt()
39+
));
40+
}
41+
42+
public static Map<String, Integer> convertUsingGson(JsonArray jsonArray) {
43+
Map<String, Integer> hashMap = new HashMap<>();
44+
Gson gson = new Gson();
45+
List<Map<String, Object>> list = new Gson().fromJson(jsonArray, List.class);
46+
for (Map<String, Object> map : list) {
47+
String type = (String) map.get("name");
48+
Integer amount = ((Double) map.get("age")).intValue(); // Gson parses numbers as Double
49+
hashMap.put(type, amount);
50+
}
51+
return hashMap;
52+
}
53+
}
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
package com.baeldung.gson.jsonarraytohashmap;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.junit.jupiter.api.Assertions.assertThrows;
5+
6+
import java.util.Map;
7+
8+
import org.junit.jupiter.api.BeforeEach;
9+
import org.junit.jupiter.api.Test;
10+
11+
import com.google.gson.JsonArray;
12+
import com.google.gson.JsonObject;
13+
14+
public class JSONArrayToHashMapConverterUnitTest {
15+
16+
private JsonArray jsonArray;
17+
private JsonArray jsonArrayWithDuplicates;
18+
19+
@BeforeEach
20+
void setUp() {
21+
jsonArray = new JsonArray();
22+
23+
JsonObject jsonObject1 = new JsonObject();
24+
jsonObject1.addProperty("name", "John Doe");
25+
jsonObject1.addProperty("age", 35);
26+
jsonArray.add(jsonObject1);
27+
28+
JsonObject jsonObject2 = new JsonObject();
29+
jsonObject2.addProperty("name", "Mary Jenn");
30+
jsonObject2.addProperty("age", 41);
31+
jsonArray.add(jsonObject2);
32+
33+
jsonArrayWithDuplicates = new JsonArray();
34+
35+
JsonObject jsonObject3 = new JsonObject();
36+
jsonObject3.addProperty("name", "John Doe");
37+
jsonObject3.addProperty("age", 35);
38+
jsonArrayWithDuplicates.add(jsonObject3);
39+
40+
JsonObject jsonObject4 = new JsonObject();
41+
jsonObject4.addProperty("name", "John Doe");
42+
jsonObject4.addProperty("age", 41);
43+
jsonArrayWithDuplicates.add(jsonObject4);
44+
}
45+
46+
47+
@Test
48+
void givenJsonArrayWithObjects_whenConvertUsingIterative_thenCorrectHashMap() {
49+
Map<String, Integer> hashMap = JSONArrayToHashMapConverter.convertUsingIterative(jsonArray);
50+
51+
assertEquals(35, hashMap.get("John Doe"));
52+
assertEquals(41, hashMap.get("Mary Jenn"));
53+
}
54+
55+
@Test
56+
void givenJsonArrayWithObjects_whenConvertUsingStreams_thenCorrectHashMap() {
57+
Map<String, Integer> hashMap = JSONArrayToHashMapConverter.convertUsingStreams(jsonArray);
58+
59+
assertEquals(35, hashMap.get("John Doe"));
60+
assertEquals(41, hashMap.get("Mary Jenn"));
61+
}
62+
63+
@Test
64+
void givenJsonArrayWithObjects_whenConvertUsingGson_thenCorrectHashMap() {
65+
Map<String, Integer> hashMap = JSONArrayToHashMapConverter.convertUsingGson(jsonArray);
66+
67+
assertEquals(35, hashMap.get("John Doe"));
68+
assertEquals(41, hashMap.get("Mary Jenn"));
69+
}
70+
71+
@Test
72+
void givenJsonArrayWithDuplicateKeys_whenConvertUsingIterative_thenLastValueWins() {
73+
Map<String, Integer> hashMap = JSONArrayToHashMapConverter.convertUsingIterative(jsonArrayWithDuplicates);
74+
assertEquals(41, hashMap.get("John Doe"));
75+
}
76+
77+
@Test
78+
void givenJsonArrayWithDuplicateKeys_whenConvertUsingStreams_thenLastValueWins() {
79+
Map<String, Integer> hashMap = JSONArrayToHashMapConverter.convertUsingIterative(jsonArrayWithDuplicates);
80+
assertEquals(41, hashMap.get("John Doe"));
81+
}
82+
83+
@Test
84+
void givenJsonArrayWithDuplicateKeys_whenConvertUsingGson_thenLastValueWins() {
85+
Map<String, Integer> hashMap = JSONArrayToHashMapConverter.convertUsingGson(jsonArrayWithDuplicates);
86+
assertEquals(41, hashMap.get("John Doe"));
87+
}
88+
}

0 commit comments

Comments
 (0)