json - 使用 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 做到这一点?
解决方案
我不知道如何使用 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)));
}
推荐阅读
- javascript - 铬合金
- powershell - 包装在 PSInvalidCastException 中时捕获特定异常的正确方法
- php - 如果不存在数据,则显示大小为 0 的数组,而不是大小为 1 的数组 (array(1) { [0]=> string(0) "" }) || PHP
- django - 将已批准的电子邮件点编辑到 localhost
- php - PHP:如果发生异常则撤消
- swift - 通用可解码,无需解码
- python - 如何在 keras 中重塑一维卷积层的数据?
- javascript - 找不到带有角度路径的控件
- hibernate - Hibernate @ManyToOne 总是用referencedColumnName 加载实体
- r - 来自 R 代码块的动态 RMarkdown 标题