2016-09-23 4 views
-2

Я хочу разобрать json, как показано ниже, используя GSON.Пожалуйста, объясните, как достичь этого, используя GSON, поскольку поле студента используется как объект, так и массив, как следует Я определяю свое pojo и как разбирать этот тип json.Поле gson с таким же именем, но с другим типом ie Object and Array

{ 
    "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); 

получение com.google.gson.JsonSyntaxException:

java.lang.IllegalStateException: Ожидаемое BEGIN_ARRAY но BEGIN_OBJECT исключение

ответ

0

Вы можете легко создавать классы POJO Java с этой услугой : http://www.jsonschema2pojo.org/

Для вашего 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; 

В основном вы должны использовать разные имена классов для элементов Student в массиве и для объекта-ученика.

+0

Pojo я создал, но при разборе я получаю ошибку com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: ожидается BEGIN_ARRAY, но BEGIN_OBJECT Gson gson = new Gson(); JSONArray jsonArray = response.getJSONArray ("school"); Тип listType = new TypeToken >() {}. GetType(); listSchool = gson.fromJson (jsonArray.toString(), listType); – Nobdore

+0

Gson gson = new Gson(); JSONArray jsonArray = response.getJSONArray ("school"); Тип listType = new TypeToken >() {}. GetType(); listSchool = gson.fromJson (jsonArray.toString(), listType); – Nobdore