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

如何反序列化嵌套列表结构JSON数组并转换为List类型

二维嵌套JSON数组反序列化方案

你给出的是典型的表头+数据行格式的二维JSON数组:

  • 数组第一个元素是字符串组成的字段表头
  • 后续每个元素是和表头顺序对应的数值/字符串/空值数据行

这种结构不需要写复杂的自定义反序列化器,按「先解析通用嵌套列表,再做字段映射」的逻辑处理即可,不同技术栈的实现方式如下:

Java 实现(Jackson 为例)

如果最终需要得到强类型的List<自定义实体>结构,参考以下代码:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.core.type.TypeReference;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class JsonParseTest {
    public static void main(String[] args) throws Exception {
        String jsonContent = "[[\"id\",\"date\",\"time\",\"start_time\",\"end_time\",\"sc_name\"],[121329387,\"2022-05-07\",null,null,null],[123863076,\"2022-12-05\",null,null,null]]";
        ObjectMapper objectMapper = new ObjectMapper();
        // 第一步:解析为无类型嵌套列表
        List<List<Object>> rawData = objectMapper.readValue(jsonContent, List.class);
        // 提取表头
        List<String> fieldNames = (List<String>)(List<?>)rawData.get(0);
        // 处理后续数据行,映射为字段名-值的Map结构
        List<Map<String, Object>> mappedData = rawData.subList(1, rawData.size()).stream()
                .map(row -> IntStream.range(0, fieldNames.size())
                        .boxed()
                        .collect(Collectors.toMap(
                                fieldNames::get,
                                index -> index < row.size() ? row.get(index) : null
                        ))
                ).collect(Collectors.toList());
        // 如需转自定义实体类,直接做类型转换即可,例:
        // List<Record> recordList = objectMapper.convertValue(mappedData, new TypeReference<List<Record>>() {});
    }

    // 自定义实体示例,字段名和表头保持一致即可
    // static class Record {
    //     private Long id;
    //     private String date;
    //     private String time;
    //     private String start_time;
    //     private String end_time;
    //     private String sc_name;
    //     // 补全getter、setter
    // }
}

如果用Gson、Fastjson等其他JSON库,逻辑完全一致,只需要替换第一步解析通用列表的API即可。

Python 实现

用Python标准库json模块处理逻辑更简洁:

import json

json_content = '[["id","date","time","start_time","end_time","sc_name"],[121329387,"2022-05-07",null,null,null],[123863076,"2022-12-05",null,null,null]]'
raw_data = json.loads(json_content)
headers = raw_data[0]
# 直接映射为字典列表
result = [dict(zip(headers, row)) for row in raw_data[1:]]

注意事项

  • 你给出的示例中存在「表头字段数多于数据行值数量」的情况,映射时需要给缺失的字段补null,避免索引越界
  • 不要尝试直接把整个JSON数组直接映射为强类型实体列表,第一行表头是字符串列表,和后续数据行结构不一致,会触发类型转换错误

内容的提问来源于stack exchange,提问作者Bibin Youhanan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:39:37