在不使用GSON的Java中将JSONArray转换为List <HashMap <String,Object >>

时间:2019-07-23 09:05:58

标签: java json list java-8 hashmap

我有一个来自JSONArray的{​​{1}},我想将其转换为net.minidev.json

使用List<HashMap<String,Object>>转换JSONArray有很多答案。

但是,我无法将Gson作为对我的Gson的依赖关系,因此我正在寻找一种使用 Java-8 功能实现此目标的方法。

我的pom.xml是这样的:它包含多个层次结构

JSONArray

我想在List中实现相同的结构

我尝试通过将JSONArray的每个元素转换为每个[ { "data": { "name": "idris" }, "children": [ { "processStandardDeduction": 69394, "cropId": 1, "data": null, "expectedQuantityPerAcre": 1220, "name": "Red Tomato 1 quality", "id": 1003, "autoArchivePlotDays": 59902 }, { "processStandardDeduction": 69394, "cropId": 1, "autoArchivePlotDays": 59902 }, { "processStandardDeduction": 69394, "cropId": 1, "autoArchivePlotDays": 59902 } ], "name": "Red Tomato", "id": 1002 }, { "data": null, "name": "Red Tomato 1 quality", "id": 1003, "processStandardDeduction": 69394, "cropId": 1, "expectedQuantityPerAcre": 1220, "cropName": "Tomato", "autoArchivePlotDays": 59902 }, { "data": null, "name": "Red Tomato 3 quality", "id": 1001, "processStandardDeduction": 69394, "autoArchivePlotDays": 59902 }, { "processStandardDeduction": 69394, "cropId": 1, "data": null, "id": 1004, "autoArchivePlotDays": 59902 } ] 然后将其添加到HashMap<String,Object>来循环。

List<HashMap<String,Object>>

我想尝试使用 Java-8功能 而不使用forEach的更好的方法。 提前致谢。

2 个答案:

答案 0 :(得分:2)

如果您将此JSON作为String,则可以使用ObjectMapper.readValue方法

readValue(String content, TypeReference valueTypeRef)

代码

List<HashMap<String, Object>> cropDetailsList = mapper.readValue(jsonString,
                                   new TypeReference<List<HashMap<String, Object>>>(){});

如果要迭代JSONArray

,请以相同的方式进行操作
List<HashMap<String, Object>> cropDetailsList = cropDetails.stream()
            .map(eachCropJson->(HashMap<String, Object>) mapper.convertValue(eachCropJson, HashMap.class))
            .collect(Collectors.toList());

答案 1 :(得分:1)

使用流可以做到

List<HashMap<String, Object>> output = cropDetails.toList().stream().map(m -> ((HashMap<String, Object>) m)).collect(Collectors.toList());