gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 11:54:26 25 4
gpt4 key购买 nike

我正在尝试从 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com