#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
}