Я пытаюсь извлечь задачи из Jira и поместить их в список [проблема]. Я понял, как скачать и разобрать JSON:
val json = JsonParser.parse(content)
Я также могу извлечь некоторые числа в корень JSON:
val total = (json \ "total").extract[Int]
val maxResults = (json \ "maxResults").extract[Int]
println("Received " + total + " from " + maxResults + " issues")
Но когда я пытаюсь извлечь список всех проблем
val issues = (json \ "issues")
println(issues)
issues.extract[List[Issue]]
Я получаю сообщение об ошибке: Исключение в потоке "main" net.liftweb.json.MappingException: нет полезного значения для идентификатора. Не знаю, как преобразовать JString (13604) в int. Я не понимаю, почему он не может преобразовать 13604 в Междунар. Вот мой класс случая:
case class Issue(id: Int,
key: String,
summary: String,
issueTypeName: String,
resolutionName: Option[String],
resolutionDate: Option[DateTime],
timeSpent: Option[Int],
creatorName: String,
reporterName: String,
updated: DateTime,
created: DateTime,
priorityName: String,
description: String,
dueDate: Option[DateTime],
statusName: String,
assigneeName: String,
projectId: Int,
projectKey: String,
projectName: String,
timeEstimate: Option[Int],
ownerName: String,
timeOriginalEstimate: Option[Int]
)
Может ли кто-нибудь помочь мне с этой проблемой Int?
Кроме того, в JSON есть вложенные элементы для некоторых свойств, таких как проект, в котором есть вложенные идентификатор, ключ и имя. Прежде чем я извлек проблемы с
json \ "issues"
, я увидел еще одну ошибку - я полагаю, что это связано с тем, что экстрактор JSON не знает, что ему нужно перейти к вложенным элементам. Как я могу сообщить ему об этом? Я думал, что могу сделать что-то вроде этого:for(issue ‹-issues) { val id = (issue \ "id").extract[Int] println(id) }
И используйте issue \ "project" \ "id"
для вложенных элементов, а затем создайте новый объект класса Case и добавьте его в List var (изменяемый, но я понятия не имею, как это сделать по-другому). Но я получаю ошибку времени компиляции:
Error:(53, 16) value foreach is not a member of net.liftweb.json.JsonAST.JValue
for(issue <- issues) {
^
Я новичок в Scala и общей инфраструктуре и фреймворках Java, поэтому буду признателен за примеры кода.
PS. Когда я изменил id на String в своем классе case, я теперь получаю еще одну ошибку:
Exception in thread "main" net.liftweb.json.MappingException: No usable value for summary Did not find value which can be converted into java.lang.String
Это потому, что «сводка» вложена в «поля». Итак, мой второй вопрос все еще актуален: 2. Как я могу работать с вложенными значениями?
и новый связанный вопрос: 3. Если я хочу использовать Int для id - как я могу его преобразовать?