首页 > 解决方案 > 使用 Stream API 将 Map 列表转换为 JSON 对象

问题描述

我正在创建一个接受 Map 的 JSON 数组的 API,它在内部调用另一个 API,该 API 期望输入为 JSON 对象。我正在尝试通过流 API 进行此转换。

{
  "request":[
    {
      "key1":"first_name",
      "value1":"Merlin"
    },
    {
      "key2":"last_name",
      "value2":"Grey"
    },
    {
      "key3":"gender",
      "value3":"female"  
    }
  ]
} 

预期输出:

{
 "first_name":"Merlin",
 "last_name":"Grey",
 "gender":"female"
}  

如何使用流 API 做到这一点?

标签: jsonjava-stream

解决方案


我不知道如何使用 Streams API 完全做到这一点,但我已经编写了一个解决方案,并且它正在工作

考虑到您已将带有键“request”的 jsonArray 存储在 List<Map<String, String>> 类型的列表“responseArr”中

        
        Map<String,String> convertedResponseMap = responseArr.stream()
                 .map(MyClass::fetchMapEntry)
                .collect(Collectors.toMap(
                entry -> entry.getKey(),
                entry ->  entry.getValue()
        ));
        System.out.println(convertedResponseMap );

然后 fetchMapEntry 方法使用您想要的逻辑创建一个条目

private static Map.Entry<String,String> fetchMapEntry(Map<String,String> map){

        List<String> keys = new ArrayList<>(map.keySet());

        if(keys.get(0).startsWith("key"))
            return Map.entry(map.get(keys.get(0)),map.get(keys.get(1)));
        else
            return Map.entry(map.get(keys.get(1)),map.get(keys.get(0)));

    }

推荐阅读