如何根据 Json 文件制作列表列表
How to make a List of Lists based off a Json file
我有一个正在迭代的 JSON 文件,我使用 gson 遍历该文件并将它们全部存储在列表中。我面临的问题是当我遍历嵌套列表时。不是像这样 [[], [], []]
使输出在外部列表中有多个列表,而是像这样 [[adds everything here]]
只是将所有内容添加到第一个内部列表中我不确定为什么要这样做,我已经尝试过很多东西已经无法正常工作
这是我的 JSON 文件
我正在尝试制作一个列表列表,其中每个列表都包含一个 P、I 和 D
{
"pos":[
{
"x": 1.0,
"y": 1.0,
"theta": 1.0,
"drive":[{
"p": 0.1,
"i": 0.1,
"d": 0.1
}]
},
{
"x": 2.0,
"y": 2.0,
"theta": 2.0,
"drive":[{
"p": 0.2,
"i": 0.2,
"d": 0.2
}]
},
{
"x": 3.0,
"y": 3.0,
"theta": 3.0,
"drive":[{
"p": 0.3,
"i": 0.3,
"d": 0.3
}]
}
]
}
我就是这样循环的
String json = readFileAsString(file);
System.out.println(json);
JsonManager manager = new Gson().fromJson(json, new TypeToken<JsonManager>() {}.getType());
List<PosData> posList = manager.getPositions();
List<Double> xList = new ArrayList<>();
List<Double> yList = new ArrayList<>();
List<Double> thetaList = new ArrayList<>();
List<Double> drivePID = new ArrayList<>();
List<List<Double>> driveLists = new ArrayList<List<Double>>();
for (PosData pos : posList) {
xList.add(pos.getX());
yList.add(pos.getY());
thetaList.add(pos.getTheta());
for(PidData pid : pos.getDrive()){
drivePID.add(pid.getP());
drivePID.add(pid.getI());
drivePID.add(pid.getD());
break;
}
driveLists.add(drivePID);
System.out.println(drivePID);
System.out.println(driveLists);
}
这是我想要的最终输出
[[0.1, 0.1, 0.1], [0.2, 0.2, 0.2], [0.3, 0.3, 0.3]]
但这就是我打印出循环时所做的事情
[[0.1, 0.1, 0.1]]
[[0.1, 0.1, 0.1, 0.2, 0.2, 0.2], [0.1, 0.1, 0.1, 0.2, 0.2, 0.2]]
[[0.1, 0.1, 0.1, 0.2, 0.2, 0.2, 0.3, 0.3, 0.3], [0.1, 0.1, 0.1, 0.2, 0.2, 0.2, 0.3, 0.3, 0.3], [0.1, 0.1, 0.1, 0.2, 0.2, 0.2, 0.3, 0.3, 0.3]]
提前感谢您的帮助!
您必须在每个循环中初始化 drivePID
列表:
for (PosData pos : posList) {
xList.add(pos.getX());
yList.add(pos.getY());
thetaList.add(pos.getTheta());
for (PidData pid : pos.getDrive()) {
List<Double> drivePID = new ArrayList<>();
drivePID.add(pid.getP());
drivePID.add(pid.getI());
drivePID.add(pid.getD());
driveLists.add(drivePID);
break;
}
System.out.println(driveLists);
}
输出:
[[0.1, 0.1, 0.1]]
[[0.1, 0.1, 0.1], [0.2, 0.2, 0.2]]
[[0.1, 0.1, 0.1], [0.2, 0.2, 0.2], [0.3, 0.3, 0.3]]
我有一个正在迭代的 JSON 文件,我使用 gson 遍历该文件并将它们全部存储在列表中。我面临的问题是当我遍历嵌套列表时。不是像这样 [[], [], []]
使输出在外部列表中有多个列表,而是像这样 [[adds everything here]]
只是将所有内容添加到第一个内部列表中我不确定为什么要这样做,我已经尝试过很多东西已经无法正常工作
这是我的 JSON 文件 我正在尝试制作一个列表列表,其中每个列表都包含一个 P、I 和 D
{
"pos":[
{
"x": 1.0,
"y": 1.0,
"theta": 1.0,
"drive":[{
"p": 0.1,
"i": 0.1,
"d": 0.1
}]
},
{
"x": 2.0,
"y": 2.0,
"theta": 2.0,
"drive":[{
"p": 0.2,
"i": 0.2,
"d": 0.2
}]
},
{
"x": 3.0,
"y": 3.0,
"theta": 3.0,
"drive":[{
"p": 0.3,
"i": 0.3,
"d": 0.3
}]
}
]
}
我就是这样循环的
String json = readFileAsString(file);
System.out.println(json);
JsonManager manager = new Gson().fromJson(json, new TypeToken<JsonManager>() {}.getType());
List<PosData> posList = manager.getPositions();
List<Double> xList = new ArrayList<>();
List<Double> yList = new ArrayList<>();
List<Double> thetaList = new ArrayList<>();
List<Double> drivePID = new ArrayList<>();
List<List<Double>> driveLists = new ArrayList<List<Double>>();
for (PosData pos : posList) {
xList.add(pos.getX());
yList.add(pos.getY());
thetaList.add(pos.getTheta());
for(PidData pid : pos.getDrive()){
drivePID.add(pid.getP());
drivePID.add(pid.getI());
drivePID.add(pid.getD());
break;
}
driveLists.add(drivePID);
System.out.println(drivePID);
System.out.println(driveLists);
}
这是我想要的最终输出
[[0.1, 0.1, 0.1], [0.2, 0.2, 0.2], [0.3, 0.3, 0.3]]
但这就是我打印出循环时所做的事情
[[0.1, 0.1, 0.1]]
[[0.1, 0.1, 0.1, 0.2, 0.2, 0.2], [0.1, 0.1, 0.1, 0.2, 0.2, 0.2]]
[[0.1, 0.1, 0.1, 0.2, 0.2, 0.2, 0.3, 0.3, 0.3], [0.1, 0.1, 0.1, 0.2, 0.2, 0.2, 0.3, 0.3, 0.3], [0.1, 0.1, 0.1, 0.2, 0.2, 0.2, 0.3, 0.3, 0.3]]
提前感谢您的帮助!
您必须在每个循环中初始化 drivePID
列表:
for (PosData pos : posList) {
xList.add(pos.getX());
yList.add(pos.getY());
thetaList.add(pos.getTheta());
for (PidData pid : pos.getDrive()) {
List<Double> drivePID = new ArrayList<>();
drivePID.add(pid.getP());
drivePID.add(pid.getI());
drivePID.add(pid.getD());
driveLists.add(drivePID);
break;
}
System.out.println(driveLists);
}
输出:
[[0.1, 0.1, 0.1]]
[[0.1, 0.1, 0.1], [0.2, 0.2, 0.2]]
[[0.1, 0.1, 0.1], [0.2, 0.2, 0.2], [0.3, 0.3, 0.3]]