如何在Spring Boot中格式化JSON列表响应,按指定字段封装列表成员
注意事项
你给出的期望响应示例存在JSON语法错误:数组结构内不能直接声明键值对,合法的索引结构需要将内部的数组替换为对象,参考格式如下:
[ { "Demon Fiend": { "createdAt": "2021-08-21T05:04:45.000+00:00", "updatedAt": "2021-08-21T05:04:45.000+00:00", "id": 1, "cardName": "Demon Fiend", ... }, "Stack": { "createdAt": "2021-08-21T05:04:58.000+00:00", "updatedAt": "2021-08-21T05:04:58.000+00:00", "id": 2, "cardName": "Stack", ... }, "Overflow": { "createdAt": "2021-08-21T05:05:00.000+00:00", "updatedAt": "2021-08-21T05:05:00.000+00:00", "id": 3, "cardName": "Overflow", ... } } ]
实现代码
根据你常用的后端语言选择对应方案即可,所有方案都支持切换id/cardName作为索引键:
- JavaScript/Node.js
// 原始查询结果结构为 [[...卡片列表]] const originCardList = response[0]; // 以cardName为索引,换成card.id即可用id作为键 const cardMap = originCardList.reduce((prev, curr) => { prev[curr.cardName] = curr; return prev; }, {}); // 保持外层数组嵌套的最终结果 const finalResponse = [cardMap];
- Python
# 原始查询结果结构为 [[...卡片列表]] origin_card_list = response[0] # 以cardName为索引,换成card["id"]即可用id作为键 card_map = {card["cardName"]: card for card in origin_card_list} # 保持外层数组嵌套的最终结果 final_response = [card_map]
- Java
// 原始查询结果结构为 List<List<Card>>,Card为卡片实体类 List<Card> originCardList = response.get(0); // 以cardName为索引,换成Card::getId即可用id作为键 Map<String, Card> cardMap = originCardList.stream() .collect(Collectors.toMap(Card::getCardName, Function.identity())); // 保持外层数组嵌套的最终结果 List<Map<String, Card>> finalResponse = Collections.singletonList(cardMap);
内容的提问来源于stack exchange,提问作者zakpruitt
相关产品推荐
相关产品推荐

