json - 从 JSON 中提取嵌套实体和值

标签 json scala jira lift case-class

我正在尝试从 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]
                    )
  1. 有人可以帮我解决这个 Int 问题吗?

  2. 此外,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/

相关文章:

performance - 标准的 Jira on Tomcat 安装可以承受多少负载?

JIRA:如何搜索不包含特定值的所有问题

java - 在 Java 中验证来自 RESTful 服务的 XML 响应的好方法是什么?

json - 在 Google Chrome DevTools 中搜索 JSON 对象

javascript - 如何将 json 对象插入到 javascript、phonegap (cordova) 中的 sqlite 表中

斯卡拉。通用类声明麻烦

tfs - 将坩埚与tfs集成

json - Postgres to-json 将复合类型转换为空结构

scala - 使用 Scala 系统进程

Scala Try 的 toOption 方法返回 Some(null)