Json 名称相同但类型不同的gson字段ie对象和数组

Json 名称相同但类型不同的gson字段ie对象和数组,json,gson,android,Json,Gson,Android,我想使用GSON解析下面这样的json。请指导如何使用GSON实现这一点,因为学生字段被用作对象和数组,我应该如何定义我的pojo以及如何解析这种类型的json { "school": [ { "student": { "name": "Rose", "address": "some address" }, "age": "15", "section": "A" }, {

我想使用GSON解析下面这样的json。请指导如何使用GSON实现这一点,因为学生字段被用作对象和数组,我应该如何定义我的pojo以及如何解析这种类型的json

{
  "school": [
    {
      "student": {
        "name": "Rose", 
        "address": "some address"
      }, 
      "age": "15", 
      "section": "A"
    }, 
    {
      "student": [
        {
          "name": "David", 
          "address": "Some place"
        }
      ], 
      "age": "14", 
      "section": "B"
    }
  ]
}

Gson gson = new Gson();
JSONArray jsonArray = response.getJSONArray("school");
Type listType = new TypeToken<ArrayList<School>>(){}.getType();
listSchool = gson.fromJson(jsonArray.toString(), listType);
{
“学校”:[
{
“学生”:{
“姓名”:“玫瑰”,
“地址”:“某个地址”
}, 
“年龄”:“15岁”,
“节”:“A”
}, 
{
“学生”:[
{
“姓名”:“大卫”,
“地址”:“某个地方”
}
], 
“年龄”:“14岁”,
“节”:“B”
}
]
}
Gson Gson=新的Gson();
JSONArray JSONArray=response.getJSONArray(“学校”);
类型listType=newTypeToken(){}.getType();
listSchool=gson.fromJson(jsonArray.toString(),listType);
正在获取com.google.gson.JsonSyntaxException:

java.lang.IllegalStateException:应为BEGIN\u数组,但为BEGIN\u对象异常


您可以使用此服务轻松生成POJO java类:

它为您的json生成:

-----------------------------------com.example.School.java-----------------------------------

package com.example;

import java.util.ArrayList;    
import java.util.List;
import javax.annotation.Generated;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

@Generated("org.jsonschema2pojo")
public class School {

@SerializedName("school")
@Expose
public List<School_> school = new ArrayList<School_>();

}
-----------------------------------com.example.School_.java-----------------------------------

package com.example;

import java.util.ArrayList;
import java.util.List;
import javax.annotation.Generated;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

@Generated("org.jsonschema2pojo")
public class School_ {

@SerializedName("student")
@Expose
public List<Student> student = new ArrayList<Student>();
@SerializedName("age")
@Expose
public String age;
@SerializedName("section")
@Expose
public String section;

}
-----------------------------------com.example.Student.java-----------------------------------

package com.example;

import javax.annotation.Generated;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

@Generated("org.jsonschema2pojo")
public class Student {

@SerializedName("name")
@Expose
public String name;
@SerializedName("address")
@Expose
public String address;
------------------------------------com.example.School.java-----------------------------------
包com.example;
导入java.util.ArrayList;
导入java.util.List;
导入javax.annotation.Generated;
导入com.google.gson.annotations.Expose;
导入com.google.gson.annotations.SerializedName;
@生成(“org.jsonschema2pojo”)
公立学校{
@序列化名称(“学校”)
@暴露
public List school=new ArrayList();
}
-----------------------------------com.example.School\uuz.java-----------------------------------
包com.example;
导入java.util.ArrayList;
导入java.util.List;
导入javax.annotation.Generated;
导入com.google.gson.annotations.Expose;
导入com.google.gson.annotations.SerializedName;
@生成(“org.jsonschema2pojo”)
公立学校{
@序列化名称(“学生”)
@暴露
public List student=new ArrayList();
@序列化名称(“年龄”)
@暴露
公共字符串年龄;
@序列化名称(“节”)
@暴露
公共字符串部分;
}
-----------------------------------com.example.Student.java-----------------------------------
包com.example;
导入javax.annotation.Generated;
导入com.google.gson.annotations.Expose;
导入com.google.gson.annotations.SerializedName;
@生成(“org.jsonschema2pojo”)
公立班学生{
@序列化名称(“名称”)
@暴露
公共字符串名称;
@序列化名称(“地址”)
@暴露
公共字符串地址;

基本上,您应该为数组中的学生项和学生对象使用不同的类名。

Pojo我已经创建了,但是在解析时,我得到了错误com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:应该是BEGIN_数组,但是是BEGIN_对象gson=new gson();JSONArray JSONArray=response.getJSONArray(“学校”);Type listType=new-TypeToken(){}.getType();listSchool=gson.fromJson(JSONArray.toString(),listType);gson-gson=new-gson();JSONArray JSONArray=response.getJSONArray(“学校”);Type listType=new-TypeToken(){}.getType();listSchool=gson.fromJson(jsonArray.toString(),listType);