You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何过滤含JSON字符串的List<String>并按class字段分组生成新列表

实现方案(Java 场景)

最简便的方式是结合 Java Stream API 和常用JSON解析库(如Jackson/Gson)完成分组,步骤如下:

1. 依赖准备

若使用Jackson,添加Maven依赖:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version>
</dependency>

若使用Gson,添加Maven依赖:

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.10.1</version>
</dependency>

2. Jackson 实现代码

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class JsonGroupDemo {
    public static void main(String[] args) {
        List<String> jsonList = List.of(
            "{\"name\":\"Alex\",\"age\":\"31\",\"class\":\"Biology\",\"parents\":{\"father\":\"Robert\",\"mother\":\"Mary\"}}",
            "{\"name\":\"John\",\"age\":\"34\",\"class\":\"Mathematics\",\"parents\":{\"father\":\"Remi\",\"mother\":\"Maya\"}}",
            "{\"name\":\"Rita\",\"age\":\"27\",\"class\":\"History\",\"parents\":{\"father\":\"Shankar\",\"mother\":\"Anita\"}}",
            "{\"name\":\"Sonia\",\"age\":\"27\",\"class\":\"Biology\",\"parents\":{\"father\":\"Mathew\",\"mother\":\"Lucy\"}}",
            "{\"name\":\"Caroline\",\"age\":\"29\",\"class\":\"Mathematics\",\"parents\":{\"father\":\"David\",\"mother\":\"Christine\"}}"
        );

        ObjectMapper mapper = new ObjectMapper();
        // 按class字段分组,得到键为班级名、值为对应JSON字符串列表的Map
        Map<String, List<String>> groupedMap = jsonList.stream()
            .collect(Collectors.groupingBy(jsonStr -> {
                try {
                    JsonNode node = mapper.readTree(jsonStr);
                    return node.get("class").asText();
                } catch (Exception e) {
                    throw new RuntimeException("JSON解析失败", e);
                }
            }));

        // 按需提取分组结果,例如获取Biology分组
        List<String> biologyList = groupedMap.get("Biology");
        // 输出验证
        biologyList.forEach(System.out::println);
    }
}

3. Gson 核心替换逻辑

如果用Gson,只需修改分组时的JSON解析部分:

import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

// 替换groupingBy中的Lambda表达式
Collectors.groupingBy(jsonStr -> {
    JsonObject obj = JsonParser.parseString(jsonStr).getAsJsonObject();
    return obj.get("class").getAsString();
})

实现方案(Python 场景)

Python 中可借助json模块和itertools.groupby快速完成:

import json
from itertools import groupby

json_list = [
    '{"name":"Alex","age":"31","class":"Biology","parents":{"father":"Robert","mother":"Mary"}}',
    '{"name":"John","age":"34","class":"Mathematics","parents":{"father":"Remi","mother":"Maya"}}',
    '{"name":"Rita","age":"27","class":"History","parents":{"father":"Shankar","mother":"Anita"}}',
    '{"name":"Sonia","age":"27","class":"Biology","parents":{"father":"Mathew","mother":"Lucy"}}',
    '{"name":"Caroline","age":"29","class":"Mathematics","parents":{"father":"David","mother":"Christine"}}'
]

# 先解析所有JSON并按class字段排序(groupby要求先排序)
parsed_list = sorted([json.loads(s) for s in json_list], key=lambda x: x['class'])
# 分组并转回JSON字符串
grouped_result = {key: [json.dumps(item) for item in group] 
                  for key, group in groupby(parsed_list, key=lambda x: x['class'])}

# 示例:获取Mathematics分组
math_list = grouped_result["Mathematics"]
for item in math_list:
    print(item)

内容的提问来源于stack exchange,提问作者Saddam Hussain I H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 23:11:00