java - 在没有 GSON 的 Java 中将 JSONArray 转换为 List<HashMap<String,Object>>

标签 java json list java-8 hashmap

我有一个 JSONArray来自 net.minidev.json我想将其转换为 List<HashMap<String,Object>> .

转换 JSONArray 有很多答案使用 Gson .

但是,我无法添加 Gson作为对我的 pom.xml 的依赖,所以我正在寻找一种使用 Java-8 功能实现它的方法。

我的 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
  }
]

我想在列表中实现相同的结构>

我尝试通过将 JSONArray 的每个元素转换为每个 HashMap<String,Object> 来循环它然后将其添加到 List<HashMap<String,Object>> .

ObjectMapper mapper = new ObjectMapper();
List<HashMap<String, Object>> cropDetailsList = new ArrayList<>();
        for (Object eachCropJson : cropDetails) { //cropDetails is the JSONArray

            HashMap<String, Object> eachCropMap = (HashMap<String, Object>) mapper.convertValue(eachCropJson,
                    HashMap.class);
            cropDetailsList.add(eachCropMap);
        }
return cropDetailsList;

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

最佳答案

如果你得到这个 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());

关于java - 在没有 GSON 的 Java 中将 JSONArray 转换为 List<HashMap<String,Object>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57160533/

相关文章:

java - 当使用 JSch 通过 Java 执行时,某些 Unix 命令会失败并返回 "... not found"

Java - 计算字符串中符号的数量

java - Collection<?> 将元素包装在 JAXB 中实际类型的复数名称中

c - 从列表中删除节点中保存的字符串

c# - 检查一个列表是否按顺序包含另一个列表中的所有项目

JavaFX : StackPane Sequential Transition

javascript - 具有属性的 JSON 数组

json - Integromat - 从 rpc 动态渲染集合的规范

Python,使用多个列表中的列将新行写入CSV

java - JSON 输出中的 Jackson : Rename Fields in Multiple Use Cases (without a single JsonProperty)