GSON将json对象转换为JAVA对象

时间:2015-05-18 09:02:32

标签: java json gson

class Admit {
    public Person p;
    public Student s;

    public void printAdmit() {
        System.out.println(p.getFirstName());
    }

    class Student {
        public long rollno;

        public String toString() {
            return "rollno: " + rollno;
        }

        public void setRollno(long rollno) {
            this.rollno = rollno;
        }
    }

    class Person {
        public String firstName;
        public String email;

        public String getFirstName() {
            return firstName;
        }

        public void setFirstName(String firstName) {
            this.firstName = firstName;
        }

        public void setEmail(String email) {
            this.email = email;
        }

        public String toString() {
            return "name: " + firstName + "email: " + email;
        }
    }
}

class JSONParsing{

    public static void main(String [] args) throws Exception {

        String json = "{'student':{'rollno':3},'person':{'firstName':'pavan','email':'mehta@yahoo.com'}}";

        Gson gson = new Gson();
        //String stud = (String)jO.getString("student");
        Admit add = gson.fromJson(json, Admit.class);

        add.printAdmit();
    }
}

我想将给定的JSON转换为2个不同的java对象(即StudentPerson)。我怎样才能在JSON中实现这一目标。内在阶级是唯一的方法吗? (即使这不起作用)。我也尝试过通过集装箱船和内部类。如果还有其他图书馆请帮忙。

2 个答案:

答案 0 :(得分:2)

此处在JSON数据中,变量名称为personstudent。因此,您还必须在POJO类中定义相同的名称。 因此,对于这种情况,您必须将变量重命名为:

public person person;
public student student;

如果您不想更改变量名称,则可以使用SerializedName注释定义其JSON变量名称:

@SerializedName("person")
public person p;

@SerializedName("student")
public student s;

还有一件事:根据JAVA编码标准,类名应以大写字母开头。因此,如果您分别使用类名PersonStudentAdmit,那会更好。

答案 1 :(得分:0)

更改您的Admit类对象,如下所示。

当您将json对象映射到相应POJO类中的varaiables时,两个名称应该相同.json对象的名称应该与绑定变量名称匹配

class Admit
   {

       public person person;

       public student student;

       public void printAdmit(){
           System.out.println(person.getFirstName());
       }