如何基于'nazwa'键对API返回的多个JSON对象进行分组?
嘿,我来给你分享几个按nazwa键分组JSON对象的实用思路,不管你用Python还是JavaScript,都能快速实现~
Python 实现方案
方法一:手动循环分组(直观易理解)
这是最基础也最灵活的方式,哪怕你对库不熟悉也能轻松搞定:
- 先把API返回的JSON字符串转成Python的字典列表
- 初始化一个空字典用来存分组结果
- 遍历每个对象,用
nazwa的值作为键,把同组的对象塞进对应的列表里
import json # 模拟API返回的JSON响应 api_response = ''' [ {"nazwa": "Kawa", "cena": 15}, {"nazwa": "Herbata", "cena": 10}, {"nazwa": "Kawa", "cena": 20}, {"nazwa": "Sok", "cena": 8} ] ''' # 转成Python列表 items = json.loads(api_response) # 初始化分组字典 grouped_items = {} for item in items: group_key = item['nazwa'] # 如果键不存在,先创建空列表 if group_key not in grouped_items: grouped_items[group_key] = [] # 把当前对象加入对应分组 grouped_items[group_key].append(item) print(grouped_items)
方法二:用itertools.groupby(简洁高效)
如果你的数据可以先排序,用这个库方法会更简洁,注意必须先按nazwa排序,因为groupby只会把连续的相同键分到一组:
from itertools import groupby import json api_response = ''' [ {"nazwa": "Kawa", "cena": 15}, {"nazwa": "Herbata", "cena": 10}, {"nazwa": "Kawa", "cena": 20}, {"nazwa": "Sok", "cena": 8} ] ''' items = json.loads(api_response) # 先按nazwa字段排序 sorted_items = sorted(items, key=lambda x: x['nazwa']) # 分组并转成字典 grouped_items = {key: list(group) for key, group in groupby(sorted_items, key=lambda x: x['nazwa'])} print(grouped_items)
JavaScript 实现方案
JS里最常用的就是reduce方法,一行核心逻辑就能搞定分组,非常高效:
- 从API拿到响应后转成JSON数组(比如用
fetch().then(res => res.json())) - 用数组的
reduce方法遍历,累积出分组结果
// 模拟API返回的数组 const apiData = [ {"nazwa": "Kawa", "cena": 15}, {"nazwa": "Herbata", "cena": 10}, {"nazwa": "Kawa", "cena": 20}, {"nazwa": "Sok", "cena": 8} ]; // 用reduce分组 const groupedData = apiData.reduce((acc, currentItem) => { const key = currentItem.nazwa; // 如果当前分组不存在,创建空数组 if (!acc[key]) { acc[key] = []; } // 加入当前元素 acc[key].push(currentItem); return acc; }, {}); console.log(groupedData);
额外注意点
- 如果有些JSON对象可能没有
nazwa键,记得加容错处理:比如Python用item.get('nazwa', '未分组'),JS用currentItem?.nazwa || '未分组' - 处理超大数据集时,Python的手动循环和JS的
reduce性能都不错,groupby因为要先排序,注意排序的性能开销
内容的提问来源于stack exchange,提问作者artek
相关产品推荐
相关产品推荐

