如何在运行时设置数组长度?根据JSON解析结果确定二维数组长度
基于JSON解析结果初始化二维数组的实现方案
核心逻辑
你只需要在JSON解析完成、拿到完整嵌套结构数据后,分别统计对应层级的元素总数,作为二维数组两个维度的长度参数完成初始化即可,不需要在读取JSON的环节提前预设数组长度。
具体操作步骤
- 定位对应维度的元素集合
完成JSON读取解析后,先明确二维数组两个维度和JSON嵌套结构的对应关系:- 数组第一维(行)长度 = JSON最外层嵌套节点的直接子元素总个数
- 数组第二维(列)长度 = 每个外层子节点下,嵌套的内层元素总个数
- 按结构分场景初始化数组
- 针对规则规整的两层嵌套JSON结构(所有外层子节点的内层元素数完全一致),直接统一取长度即可,示例代码(以Java为例):
// 解析完成后的JSON根节点列表 JSONArray rootArray = jsonParsedResult; // 取第一维长度:根数组的元素总数 int rowCount = rootArray.size(); // 取第二维长度:首个子数组的元素总数(规整结构下行长度统一) int colCount = rootArray.getJSONArray(0).size(); // 初始化对应长度的二维数组 DataType[][] targetArray = new DataType[rowCount][colCount]; - 针对不规则的嵌套JSON结构(不同外层子节点的内层元素数不固定),不需要提前设置统一的列长度,逐行匹配实际长度即可,示例代码:
JSONArray rootArray = jsonParsedResult; int rowCount = rootArray.size(); // 先只初始化第一维的长度 DataType[][] targetArray = new DataType[rowCount][]; for (int i = 0; i < rowCount; i++) { // 给每一行单独设置匹配当前子元素数的列长度 targetArray[i] = new DataType[rootArray.getJSONArray(i).size()]; }
- 针对规则规整的两层嵌套JSON结构(所有外层子节点的内层元素数完全一致),直接统一取长度即可,示例代码(以Java为例):
注意事项
- 所有长度统计操作必须在JSON完全解析完成后执行,不能在读取流的过程中边读边设置长度,否则容易因为统计不全出现长度溢出、索引越界问题
- 统计内层元素数时需要对空节点、空数组做判空处理,避免因为读取null值触发空指针异常
内容的提问来源于stack exchange,提问作者Daniel López
相关产品推荐
相关产品推荐

