【问题标题】:Converting JSON list as different Java Objects in GSON在 GSON 中将 JSON 列表转换为不同的 Java 对象
【发布时间】:2016-10-19 09:29:10
【问题描述】:

我有以下 json 字符串:

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

如何使用 GSON 将问题、标签和选择放入单独的对象中?目前我只使用fromJson,并且只能转换JSON字符串,如果它只包含一种类型的对象。

【问题讨论】:

  • 一种类型的对象可以在内部包含保存其他类型实例的字段。因此,您需要内部包含 question 类型字段的类,该类型内部具有 questionIdcourseId 字段。您可以通过jsonschema2pojo.org 生成此类类。然后将您的 json 字符串反序列化为此类类的数组或列表。

标签: java json gson


【解决方案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());

【讨论】:

  • 如何在语法上将提取的部分分配给不同的对象?
  • 正如我上面提到的,将在提取类对象中捕获
【解决方案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
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-26
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多