我正在尝试从 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: id 没有可用值 不知道如何将 JString(13604) 转换为 int 我不明白为什么它不能将 13604 转换为 Int。 这是我的案例类:
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 还具有某些属性的嵌套元素,例如项目具有嵌套的 id、key 和 name。在我使用
json\"issues"
提取问题之前,我看到了另一个错误 - 我相信这是因为 JSON 提取器不知道他需要转到嵌套元素。 我怎样才能让他知道这件事呢? 我想我可以做这样的事情:for(问题 <- 问题){ val id = (issue\"id").extract[Int] 打印(id) }
并使用 issue\"project"\"id"
作为嵌套项目,然后创建新的 Case Class 对象并将其添加到 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 时,我现在收到另一个错误: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 - 我该如何转换它?
最佳答案
这是因为 json 中的 id 字段以字符串形式出现 ("id": "10230"https://developer.atlassian.com/display/JIRADEV/JIRA+REST+API+Example+-+Query+issues ),liftjson 会自动将其转换为 JString。在您的案例类中,您需要将 id 字段设置为字符串。
2) 使用案例类来处理嵌套的 json。如果你有一个像这样的 json
{
"id": "10230",
"fields": {
"summary": "testing"
}
}
您将需要两个案例类
case class Issues(
id: String,
fields: Summary
)
case class Summary(
summary: String
)
3) 我认为您不能在 extract 方法中将其转换为 Int,因为 JSON 结构将其定义为 String。提取值后必须进行转换。
关于json - 从 JSON 中提取嵌套实体和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24477646/