Java 可变大小的二维数组
我想做的是做一些Java 可变大小的二维数组,java,arrays,Java,Arrays,我想做的是做一些 String[][] array = new String[sizeX][sizeY] SizeX基于根JSON数组的长度,sizeY基于根JSON数组中的数组长度 考虑一下,我可以使用单个数组,但我不确定如何引用内部数组从中获取信息。例如: String[] array = new String[sizeX]; array[i] = new String[sizeY]; // initialized to variable size of JSON 从这里开始,我将如何
String[][] array = new String[sizeX][sizeY]
SizeX基于根JSON数组的长度,sizeY基于根JSON数组中的数组长度
考虑一下,我可以使用单个数组,但我不确定如何引用内部数组从中获取信息。例如:
String[] array = new String[sizeX];
array[i] = new String[sizeY]; // initialized to variable size of JSON
从这里开始,我将如何引用内部数组以及内部数组中的对象
JSON
{"23591778": {
"pages": [
{
"masteries": [
{
"id": 4211,
"rank": 2
},
{
"id": 4214,
"rank": 2
},
{
"id": 4134,
"rank": 3
},
{
"id": 4124,
"rank": 1
},
{
"id": 4114,
"rank": 1
},
{
"id": 4222,
"rank": 3
},
{
"id": 4112,
"rank": 4
},
{
"id": 4221,
"rank": 1
},
{
"id": 4144,
"rank": 1
},
{
"id": 4122,
"rank": 3
},
{
"id": 4152,
"rank": 3
},
{
"id": 4141,
"rank": 1
},
{
"id": 4111,
"rank": 1
},
{
"id": 4132,
"rank": 1
},
{
"id": 4232,
"rank": 1
},
{
"id": 4162,
"rank": 1
},
{
"id": 4131,
"rank": 1
}
],
"id": 34787712,
"name": "Blind",
"current": false
},
{
"masteries": [
{
"id": 4212,
"rank": 2
},
{
"id": 4233,
"rank": 3
},
{
"id": 4242,
"rank": 1
},
{
"id": 4214,
"rank": 2
},
{
"id": 4114,
"rank": 1
},
{
"id": 4251,
"rank": 1
},
{
"id": 4112,
"rank": 4
},
{
"id": 4222,
"rank": 3
},
{
"id": 4122,
"rank": 3
},
{
"id": 4262,
"rank": 1
},
{
"id": 4224,
"rank": 1
},
{
"id": 4252,
"rank": 3
},
{
"id": 4132,
"rank": 1
},
{
"id": 4241,
"rank": 3
},
{
"id": 4232,
"rank": 1
}
],
"id": 34787713,
"name": "AD/Tank Jungle",
"current": false
},
{
"masteries": [
{
"id": 4242,
"rank": 1
},
{
"id": 4233,
"rank": 3
},
{
"id": 4243,
"rank": 1
},
{
"id": 4211,
"rank": 2
},
{
"id": 4214,
"rank": 2
},
{
"id": 4213,
"rank": 2
},
{
"id": 4114,
"rank": 1
},
{
"id": 4252,
"rank": 2
},
{
"id": 4222,
"rank": 3
},
{
"id": 4113,
"rank": 4
},
{
"id": 4221,
"rank": 1
},
{
"id": 4123,
"rank": 3
},
{
"id": 4262,
"rank": 1
},
{
"id": 4224,
"rank": 1
},
{
"id": 4133,
"rank": 1
},
{
"id": 4234,
"rank": 1
},
{
"id": 4232,
"rank": 1
}
],
"id": 34787714,
"name": "Mumu",
"current": true
},
{
"masteries": [
{
"id": 4211,
"rank": 2
},
{
"id": 4121,
"rank": 1
},
{
"id": 4214,
"rank": 2
},
{
"id": 4134,
"rank": 3
},
{
"id": 4114,
"rank": 1
},
{
"id": 4222,
"rank": 3
},
{
"id": 4112,
"rank": 4
},
{
"id": 4144,
"rank": 1
},
{
"id": 4221,
"rank": 1
},
{
"id": 4152,
"rank": 3
},
{
"id": 4122,
"rank": 3
},
{
"id": 4141,
"rank": 1
},
{
"id": 4111,
"rank": 1
},
{
"id": 4132,
"rank": 1
},
{
"id": 4232,
"rank": 1
},
{
"id": 4162,
"rank": 1
},
{
"id": 4131,
"rank": 1
}
],
"id": 34787715,
"name": "vi/j4/wuk/xin/noc",
"current": false
},
{
"masteries": [
{
"id": 4212,
"rank": 2
},
{
"id": 4353,
"rank": 3
},
{
"id": 4211,
"rank": 2
},
{
"id": 4311,
"rank": 1
},
{
"id": 4362,
"rank": 1
},
{
"id": 4322,
"rank": 3
},
{
"id": 4334,
"rank": 1
},
{
"id": 4332,
"rank": 1
},
{
"id": 4352,
"rank": 1
},
{
"id": 4222,
"rank": 3
},
{
"id": 4314,
"rank": 1
},
{
"id": 4221,
"rank": 1
},
{
"id": 4331,
"rank": 3
},
{
"id": 4324,
"rank": 1
},
{
"id": 4313,
"rank": 3
},
{
"id": 4232,
"rank": 1
},
{
"id": 4342,
"rank": 1
},
{
"id": 4341,
"rank": 1
}
],
"id": 34787716,
"name": "Support",
"current": false
},
{
"masteries": [
{
"id": 4211,
"rank": 2
},
{
"id": 4214,
"rank": 2
},
{
"id": 4124,
"rank": 1
},
{
"id": 4114,
"rank": 1
},
{
"id": 4112,
"rank": 4
},
{
"id": 4222,
"rank": 3
},
{
"id": 4113,
"rank": 4
},
{
"id": 4122,
"rank": 3
},
{
"id": 4152,
"rank": 3
},
{
"id": 4224,
"rank": 1
},
{
"id": 4132,
"rank": 1
},
{
"id": 4142,
"rank": 3
},
{
"id": 4232,
"rank": 1
},
{
"id": 4162,
"rank": 1
}
],
"id": 34787717,
"name": "AD Jungle",
"current": false
},
{
"masteries": [
{
"id": 4212,
"rank": 2
},
{
"id": 4211,
"rank": 2
},
{
"id": 4121,
"rank": 1
},
{
"id": 4134,
"rank": 3
},
{
"id": 4124,
"rank": 1
},
{
"id": 4114,
"rank": 1
},
{
"id": 4222,
"rank": 3
},
{
"id": 4112,
"rank": 4
},
{
"id": 4221,
"rank": 1
},
{
"id": 4122,
"rank": 3
},
{
"id": 4152,
"rank": 3
},
{
"id": 4141,
"rank": 1
},
{
"id": 4142,
"rank": 1
},
{
"id": 4132,
"rank": 1
},
{
"id": 4232,
"rank": 1
},
{
"id": 4162,
"rank": 1
},
{
"id": 4131,
"rank": 1
}
],
"id": 34787718,
"name": "ADC",
"current": false
},
],
"summonerId": 23591778
}}
声明如下:
String[][] arr = new String[][numRows];
然后通过以下方法之一向其添加阵列:
arr[0] = new String[lengthOfJSONArray];
arr[0] = getStringArray();
更新:因为你更新了你的帖子,提供了更多信息,下面是我的新答案 您没有JSON数组的JSON数组,而是JSON对象的数组。反过来,这些对象有一个属性,那就是映射(我相信),但这并不重要。您正在尝试使用二维数组而不是一维对象数组 创建一个类来表示对象:
public class MasteryPage {
private long id;
private String name;
private boolean current;
private Map<Long,Integer> masteries = new HashMap<>();
public MasteryPage(long id, String name, boolean current) {
this.id = id;
this.name = name;
this.current = current;
}
public void addMastery(long id, int rank) {
masteries.put(id, rank);
}
// add getters/setters...
}
公共类主页面{
私人长id;
私有字符串名称;
私有布尔电流;
私有地图掌握=新HashMap();
公共主页面(长id、字符串名称、当前布尔值){
this.id=id;
this.name=名称;
这个电流=电流;
}
公共虚空addMastery(长id,整数等级){
掌握。放置(id,等级);
}
//添加getter/setter。。。
}
然后使用类创建数组:
JSONArray jArray = json.getJSONArray("pages");
MasteryPage[] arr = new MasteryPage[jArray.length()];
for (int i = 0; i < jArray.length(); i++) {
JSONObject jsonMasteryPage = jArray.getJSONObject(i);
long id = jsonMasteryPage.getLong("id");
String name = jsonMasteryPage.getString("name");
boolean current = jsonMasteryPage.getBoolean("current");
MasteryPage page = new MasteryPage(id, name, current);
JSONArray jsonMasteries = jsonMasteryPage.getJSONArray("masteries");
for (int j = 0; j < jsonMasteries.length(); j++) {
JSONObject jsonMastery = jsonMasteries.getJSONObject(i);
page.addMastery(jsonMastery.getLong("id"), jsonMastery.getInt("rank"));
}
arr.add(page);
}
JSONArray jArray=json.getJSONArray(“页面”);
MasteryPage[]arr=新MasteryPage[jArray.length()];
for(int i=0;i
然后,您可以创建每个mastery页面并解析JSON以填充其字段。
String[]array=newstring[sizeX]
不是数组的数组,它是字符串的数组,因此数组[i]=新字符串[sizeY]“代码>将给您一个类型不匹配错误。@azurefrog您是对的。”。我只是很快地把代码打出来,让大家明白我的意思。还是半睡半醒。我会解决的。为什么JSON数组中有不同长度的对象?你能展示一下你的具体用例吗?JSON数组中包含什么?@Joffrey对象的长度不同,因为JSON不返回没有ID的部分。此外,可以将点分布到这些ID中的方式是可变的。这就是问题的原因。@Nate我仍然不了解您的用例。你能在你的问题中详细说明一下吗?也许可以发布你的JSON的一部分。您的JSON数组中是否有数组,或者只是具有属性的对象?为什么这些对象会有不同的类型?如果问题只是缺少一些属性,那么为什么不将JSON对象解析为带有一些未初始化字段的对象,而不是使用第二维度来索引属性呢?我想你的意思是newstring[numRows][]代码>