web-dev-qa-db-ja.com

Gson fromJson()はnull属性を持つオブジェクトを返します

私はこの行を使用していくつかのJavaオブジェクトを作成しようとしています:

Quiz currentQuiz = gson.fromJson(json, Quiz.class);

しかし、私が得るのはこれだけです:

Quiz object after fromJson

これが私のオブジェクトクラスです:

クイズ:

public class Quiz {

private String ref;
private String broadcast_dt;
private Question[] questions;

public Quiz() {
    // TODO Auto-generated constructor stub
}

public String getRef() {
    return ref;
}

public void setRef(String ref) {
    this.ref = ref;
}

public String getBroadcast_dt() {
    return broadcast_dt;
}

public void setBroadcast_dt(String broadcast_dt) {
    this.broadcast_dt = broadcast_dt;
}

public Quiz(String ref, String broadcast_dt, Question[] questions) {
    super();
    this.ref = ref;
    this.broadcast_dt = broadcast_dt;
    this.questions = questions;
}

public Question[] getQuestions() {
    return questions;
}

public void setQuestions(Question[] questions) {
    this.questions = questions;
} 
}

質問:

public class Question {

private int question_number;
private String question_text;
private Answer[] answers;

public Question(){

}

public Question(int question_number, String question_text, Answer[] answers) {
    super();
    this.question_number = question_number;
    this.question_text = question_text;
    this.answers = answers;
}

public int getQuestion_number() {
    return question_number;
}

public void setQuestion_number(int question_number) {
    this.question_number = question_number;
}

public String getQuestion_text() {
    return question_text;
}

public void setQuestion_text(String question_text) {
    this.question_text = question_text;
}

public Answer[] getAnswers() {
    return answers;
}

public void setAnswers(Answer[] answers) {
    this.answers = answers;
}
}

回答:

public class Answer {

private String answer_text;
private boolean correct_yn;

public Answer(){

}

public String getAnswer_text() {
    return answer_text;
}

public void setAnswer_text(String answer_text) {
    this.answer_text = answer_text;
}

public boolean isCorrect_yn() {
    return correct_yn;
}

public void setCorrect_yn(boolean corrent_yn) {
    this.correct_yn = corrent_yn;
}
}

そしてこれが私のJSONです:

{
"quiz": {
    "ref": "45g36745bu46",
    "broadcast_dt": "2013-03-03T00:00:00Z",
    "questions": [
        {
            "question_number": 1,
            "question_text": "Example question one",
            "answers": [
                {
                    "answer_text": "Answer one",
                    "correct_yn": false
                },
                {
                    "answer_text": "Answer two",
                    "correct_yn": true
                },
                {
                    "answer_text": "Answer three",
                    "correct_yn": false
                }
            ]
        },
        {
            "question_number": 2,
            "question_text": "Question number two",
            "answers": [
                {
                    "answer_text": "Something",
                    "correct_yn": false
                },
                {
                    "answer_text": "Something else",
                    "correct_yn": false
                },
                {
                    "answer_text": "Another thing",
                    "correct_yn": true
                }
            ]
        },
        {
            "question_number": 3,
            "question_text": "And a third question with some additional question text appearing here.",
            "answers": [
                {
                    "answer_text": "Cow",
                    "correct_yn": false
                },
                {
                    "answer_text": "Pig",
                    "correct_yn": true
                }
            ]
        }
    ]
}
}

なぜこれが起こるのか考えはありますか?エラーメッセージやLogCat出力が表示されません。

11
MSpeed

あなたのjsonから:ルートレベルでは次のようなものだと思います

{クイズ:{参照などを持つクイズオブジェクト}}

したがって、gsonを使用して解析を開始するには、レベルを1つ下げる必要があります。

だから、これを試してみてください、

JSONObject quizObject = json.get("quiz");

Quiz currentQuiz = gson.fromJson(quizObject.toString(), Quiz.class);
17
SKK

私の場合は削除しました

@SerializedName("OpCode")
@Expose

上記のモデルクラスのパーツ

private Integer opCode;

ライン。そして、Gsonはそれを解析できなかったので、私の属性はnullでした。それらの行を追加すると修正されました。

1
Hilal