如何根据 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]]