У меня есть следующий метод, чтобы прочитать файл в формате JSON и преобразовать его в Question
объекта:Как преобразовать строку в объект
def self.deserializeQuestions(json)
if json.nil?
else
data = JSON.parse(json)
questions = Hash.new
data['questions'].map do |q|
questions[q['id']] = Question.new(q['id'], q['questionText'])
end
end
end
JSON содержит вопросы разных типов, которые соответствуют различным классам. Типы: 'multichoice'
, 'truefalse'
и т. Д., А классы - MultichoiceQuestion
, TrueFalseQuestion
и т. Д. Все они наследуют от Question
, которые все еще имеют id
и questionText
.
Ниже приведен пример файла JSON я использую:
{ "questions":
[
{
"type": "multichoice",
"id" : 1,
"questionText": "Scala is...",
"alternatives": [
{ "text": "alternative 1", "code": 1, "value": 1 },
{ "text": "alternative 2", "code": 2, "value": -0.25 },
{ "text": "alternative 3", "code": 3, "value": -0.25 }
]
},
{
"type" : "truefalse",
"id" : 2,
"questionText": "Ruby creator is Yukihiro Matsumoto",
"correct": true,
"valueOK": 1,
"valueFailed": -0.25,
}
]
}
Как я могу изменить этот код, чтобы иметь возможность создавать определенные типы Question
на основе типа атрибута?
Как бы вы поняли, когда создавать объекты класса ... Вам нужно предоставить дополнительную информацию .. –
Я отредактировал вопрос на примере используемого файла JSON. –
Вы не упомянули 'questionId' в JSON, который вы разбираете. Вы уверены, что это 'questionId', а не' id'? – Surya