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

使用Gson访问JSON中pos列表内嵌套的drive字段时出现空指针异常

问题原因

你把drive字段的定义放错了类:你当前把@SerializedName("drive")对应的List<PidData>定义在了根类JsonManager里,但你的JSON结构中drive是嵌套在pos数组的每个子对象里的,不属于根对象的直接字段,所以manager.getDrive()返回的永远是null,遍历的时候自然抛出空指针异常。你之前测试drive放在JSON根目录下能正常运行,就是因为那时候drive字段属于根对象,和你定义在JsonManager类里的字段能对应上,现在层级变了,字段的所属类也要对应调整。

修复步骤
  1. 把drive相关的字段、getter、setter从JsonManager类中移除,移动到PosData类中:
// 以下代码属于PosData类
@SerializedName("drive")
private List<PidData> drive = null;

public List<PidData> getDrive() {
    return drive;
}
public void setDrive(List<PidData> drive) {
    this.drive = drive;
}
  1. 修改取值逻辑,在遍历PosData的时候从当前的pos对象中获取drive列表,而不是从根对象获取:
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<>();

for (PosData pos : posList) {
    xList.add(pos.getX());
    yList.add(pos.getY());
    thetaList.add(pos.getTheta());
    // 从当前pos对象获取drive列表
    List<PidData> driveList = pos.getDrive();
    // 非空判断避免特殊场景空指针
    if (driveList != null) {
        for(PidData pid : driveList){
            drivePID.add(pid.getP());
        }
    }
}

System.out.println(xList);
System.out.println(yList);
System.out.println(thetaList);
System.out.println(drivePID);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 11:51:03