Преобразование списка JSON в виде различных объектов Java в GSON

#java #json #gson

#java #json #gson

Вопрос:

У меня есть следующая строка json:

 [
    {
        "question" : {
            "questionId" : 1109,
            "courseId" : 419
        },
        "tags" : ["PPAP", "testtest"],
        "choices" : [{
                "choiceId" : 0,
                "questionId" : 0
            }, {
                "choiceId" : 0,
                "questionId" : 0
            }
        ]
    }
]
  

Как мне преобразовать вопрос, теги и варианты выбора в отдельные объекты, используя GSON? В настоящее время я использую только fromJson и могу преобразовать строку JSON, только если она содержит только 1 тип объекта.

Комментарии:

1. Один тип объекта может внутренне содержать поля, которые содержат экземпляры других типов. Итак, вам нужен класс, который внутренне содержит question поле типа, которое внутренне имеет questionId и courseId field. Вы можете создавать такие классы с помощью jsonschema2pojo.org . Затем десериализуйте вашу строку json в массив или список таких классов.

Ответ №1:

У вас могут быть следующие классы

 class Question{
   questionId; //specify data type 
   courseId;
}
class Choice{
   choiceId;
   questionId;
}
  

Затем вы можете определить еще один класс, который будет содержать все три переменные-члена

 class Extract{
 Question question;
 List<String> tags;
 List<Choice> choices;
} 
  

Затем вы можете передать этот класс Extract в fromJson метод, подобный

 List<Extract> result = gson.fromJson(jsonString, new TypeToken<List<Extract>>(){}.getType());
  

Комментарии:

1. Как мне синтаксически назначить извлеченные части разным объектам?

2. Как я упоминал выше, это будет записано в Extract Class object

Ответ №2:

Это сработало для меня с определенными классами POJO.

 public static void main(String[] args) {
String jsonString = "[{"question":{"questionId":1109,"courseId":419},"tags":["PPAP","testtest"],"choices":[{"choiceId":0,"questionId":0},{"choiceId":0,"questionId":0}]}]";
        Gson gson = new Gson();

        JsonParser parser = new JsonParser();
        JsonArray array = parser.parse(jsonString).getAsJsonArray();

        for (final JsonElement json : array) {
            JsonModel jsonModel = gson.fromJson(json, new TypeToken<JsonModel>() {
            }.getType());
            System.out.println(jsonModel.toString());
        }

}
public class JsonModel implements Serializable {

    private static final long serialVersionUID = -2255013835370141266L;
    private List<Choices> choices;
    private List<String> tags;
    private Question question;
    ...    
    getters and setters
  }

public class Choices implements Serializable{

    private static final long serialVersionUID = 3947337014862847527L;

    private Integer choiceId;
    private Integer questionId;
    ...    
    getters and setters
}

public class Question implements Serializable{

    private static final long serialVersionUID = -8649775972572186614L;

    private Integer questionId;
    private Integer courseId;
    ...    
    getters and setters
}