Gson:将json字符串解析为java arraylist,就像建模一样

时间:2014-08-08 14:15:28

标签: gson

我试图解析我从limesurvey服务器到Java的Json响应,但是我不知道我应该创建什么类型的类。

这是我要解析为java对象的json字符串:

{"id":1,"result":{"gid":"1","type":"L","help":"Veuillez entrer votre niveau d'\u00e9tudes \u00e0 l'INPT.","language":"fr","sid":"796246","question_order":"3","question":"<p>\r\n\tvotre niveau d'\u00e9tudes \u00e0 l'INPT :<\/p>\r\n","answeroptions":{"A1":{"answer":"INE1","assessment_value":"0","scale_id":"0"},"A2":{"answer":"INE2","assessment_value":"1","scale_id":"0"},"A3":{"answer":"INE3","assessment_value":"1","scale_id":"0"}}},"error":null}

为了解析它,我创建了以下类:

   public class Answer 
{
    String answer;
    int assessment_value;
    int scale_id;

    @Override
    public String toString() {
        return "answer : "+answer + " - assessment_value : " + assessment_value + " - scale_id :" + scale_id;
    }

}
public class answerOptions 
{
    String a;
    Answer t;

}
public class QuestionProperties 
{
    int gid;
    String type;
    String help;
    String language;
    int sid;
    int question_order;
    String question;
    ArrayList<answerOptions> answeroptions;

    @Override
    public String toString() {
        return "gid : "+gid + " - type : " + type + " - help :" + help + " - language :" + language + " - sid :" + sid + " - question_order :" + question_order + " - question :" + question;
    }
}
public class getQuestionProperties 
{
    int id;
    QuestionProperties result;
    String error;

    @Override
    public String toString() {
        return "id : "+id + " - result : " + result + " - error :" + error;
    }

}

我遇到的问题是我宣布了#34; answeroptions&#34;作为一个阵列,虽然它不是,但是我不能确定那里的选项数量,我尝试了一个类似一对的类,但它没有工作?关于如何在不失去一般性的情况下建模这个问题的任何想法,因为我想要一个方法来自动解析这个选项的数量!!

1 个答案:

答案 0 :(得分:0)

你几乎做得很好。只需根据JSON字符串将其更改为Map<String,Answer>而不是ArrayList<answerOptions>。这里&#34; A1&#34;,&#34; A2&#34;和&#34; A3&#34;是地图的关键。

样品:

class QuestionProperties {
    ...
    Map<String,Answer> answeroptions;
}

在JSON String中包含在

中的任何内容

{...}已转换为Map或自定义POJO类对象

[...]已转换为ArrayList

关于JSON的

Learn more...并遵循此post

enter image description here

enter image description here

注意:遵循类名的Java命名约定。通过制作private并使用正确的getter / setter方法封装所有变量。