【问题标题】:Parsing nested object with Gson使用 Gson 解析嵌套对象
【发布时间】:2016-12-08 09:28:55
【问题描述】:

我有 Json 文件:

{
  "persons": [
    {
      "name": "Dan",
      "surename": "Govi",
      "PersonData": {
        "height ": "180",
        "weight": "80"
      }
    },
    {
      "name": "John",
      "surename": "Babu",
      "PersonData": {
        "height ": "160",
        "weight": "75"
      }
    },
    {
      "name": "Ivan",
      "surename": "Slav",
      "PersonData": {
        "height ": "200",
        "weight": "160"
      }
    }
  ]
}

这是我的 PersonListHolder 类:

public class PersonListHolder {

private List<Persons> personList;

public List<Persons> getPersonList() {
    return personList;

}
}

人物类:

public class Persons {


    String name;
    String surename;

    PersonData personData;

    public PersonData getPersonData() {
        return personData;
    }

    public class PersonData{

        String height ;
        String weight;

        public String getHeight() {
            return height;
        }

        public String getWeight() {
            return weight;
        }

        public String getMaxAverageBitrate() {
            return MaxAverageBitrate;
        }
    }

    public String getName() {
        return name;
    }

    public String getSureName() {
        return surename;
    }


}

我如何获得它们:

Gson gson = new Gson();
 gson.fromJson(myJson,PersonListHolder.class);

 PersonListHoldertst tst = gson.fromJson(myJson,PersonListHolder.class);

    Persons cd1 = tst.getPersonList().get(0);
    Log.d("DTAG","D1: "+cd1.getName());

    Persons.PersonData cd2 = cd1.getPersonData();

    Log.d("DTAG","D2: "+cd2.getHeight());

在第一个日志中我看到了结果,但在第二个日志中我得到了 null

Attempt to invoke virtual method 'java.lang.String ---- on a null object reference

【问题讨论】:

  • 您需要在您希望 Gson 解析的每个字段上添加 @Expose 注释。 personList 应该是 persons

标签: android gson


【解决方案1】:

几个错误

public class PersonListHolder {

private List<Persons> persons;

public List<Persons> getPersonList() {

return personList;

 }
}

public class Persons {


String name;
String surename;

@SerializeName("PersonData")
PersonData personData;

public PersonData getPersonData() {
    return personData;
    }

public class PersonData{

    String height ;
    String weight;

    public String getHeight() {
        return height;
    }

    public String getWeight() {
        return weight;
    }

    public String getMaxAverageBitrate() {
        return MaxAverageBitrate;
     }
 }

public String getName() {
    return name;
}

public String getSureName() {
    return surename;
 }
}

【讨论】:

    【解决方案2】:

    应该是person而不是personList

     public class PersonListHolder {
    
    private List<Persons> persons;
    
    public List<Persons> getPersonList() {
    return personList;
    
     }
    }
    

    【讨论】:

      【解决方案3】:

      进行以下更改....属性名称区分大小写

          @SerializedName("PersonData")
          PersonData personData;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多