将JSONArray转换为列表<;HashMap<;字符串,对象>&燃气轮机;在没有GSON的java中

将JSONArray转换为列表<;HashMap<;字符串,对象>&燃气轮机;在没有GSON的java中,java,json,list,java-8,hashmap,Java,Json,List,Java 8,Hashmap,我有一个来自net.minidev.json的JSONArray,我想把它转换成列表 使用Gson转换JSONArray有很多答案 但是,我不能将Gson作为依赖项添加到我的pom.xml,因此我正在寻找一种方法,用Java-8特性来实现它 我的JSONArray是这样的:它由多个层次结构组成 [ { "data": { "name": "idris" }, "children": [ { "processStandardDed

我有一个来自
net.minidev.json
JSONArray
,我想把它转换成
列表

使用
Gson
转换
JSONArray
有很多答案

但是,我不能将
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
,然后将其添加到
列表中

ObjectMapper mapper=new ObjectMapper();
List cropDetailsList=新的ArrayList();
对于(对象eachCropJson:cropDetails){//cropDetails是JSONArray
HashMap eachCropMap=(HashMap)mapper.convertValue(eachCropJson,
HashMap.class);
cropDetailsList.add(每个cropMap);
}
返回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>>>(){});

使用流可以做到这一点

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

只需使用
map
和收集就可以了
cropDetails.stream().map(eachCropMap->(map)mapper.convertValue(eachCropJson,HashMap.class)).collect(Collectors.toList())
将JSONArray转换为字符串难道不会成为一项代价高昂的操作吗?如果不是,那么我将使用这种方法。因为我已经在使用映射器将JSONArray的每个对象转换为HashMap,所以我不确定哪种方法在性能方面更好。我认为这不是一个代价高昂的操作,
toString()
应该适用于@MohammedIdris,但我也给了您第二种方法,您可以避免这种类型转换
(HashMap)
在mohammedidris进行一些谷歌搜索第一种方法似乎如预期的那样有效。但是,
StreamSupport.stream
表示
方法流(Spliterator,boolean)不适用于参数(JSONArray,boolean)
。我是否使用cast
(拆分器)
(拆分器)
?此外,类型铸造是一个坏主意吗@DeadpoolIt与更新的答案正常工作。谢谢@Deadpool
cropDetails
是一个
JSONArray
toList()
函数未定义类型
JSONArray
@SUMIT Naviusing stream on
cropDetails JSONArray
给了我预期的结果。
List<HashMap<String, Object>> cropDetailsList = cropDetails.stream()
            .map(eachCropJson->(HashMap<String, Object>) mapper.convertValue(eachCropJson, HashMap.class))
            .collect(Collectors.toList());
List<HashMap<String, Object>> output = cropDetails.toList().stream().map(m -> ((HashMap<String, Object>) m)).collect(Collectors.toList());