用Circe解析Json数组
我是Circe的初学者,我想从这个JSon中检索信息用Circe解析Json数组,json,scala,circe,Json,Scala,Circe,我是Circe的初学者,我想从这个JSon中检索信息 [ { "sha":"7fd1a60b01f91b314f59955a4e4d4e80d8edf11d", "commit":{ "author":{ "name":"The Octocat", "email":"octocat@nowhere.com", "date":"2012-03-06T23:06:5
[
{
"sha":"7fd1a60b01f91b314f59955a4e4d4e80d8edf11d",
"commit":{
"author":{
"name":"The Octocat",
"email":"octocat@nowhere.com",
"date":"2012-03-06T23:06:50Z"
},
"committer":{
"name":"The Octocat",
"email":"octocat@nowhere.com",
"date":"2012-03-06T23:06:50Z"
},
"message":"Merge pull request #6 from Spaceghost/patch-1\n\nNew line at end of file.",
},
"url":"https://api.github.com/repos/octocat/Hello-World/commits/7fd1a60b01f91b314f59955a4e4d4e80d8edf11d",
},
{
"sha":"762941318ee16e59dabbacb1b4049eec22f0d303",
"commit":{
"author":{
"name":"Johnneylee Jack Rollins",
"email":"johnneylee.rollins@gmail.com",
"date":"2011-09-14T04:42:41Z"
},
"committer":{
"name":"Johnneylee Jack Rollins",
"email":"johnneylee.rollins@gmail.com",
"date":"2011-09-14T04:42:41Z"
},
"message":"New line at end of file. --Signed off by Spaceghost",
},
"url":"https://api.github.com/repos/octocat/Hello-World/commits/762941318ee16e59dabbacb1b4049eec22f0d303",
},
]
我不明白这段代码怎么没有捕捉到关于“作者”的信息
val doc= parse(response.json.toString()).getOrElse(Json.Null)
doc.hcursor.downArray.downField("commit").right.as[Seq[String]] match {
case Left(failure) => println("Fail")
case Right(json) => println("Ok")
}
你有什么想法吗
提前感谢,您的json在某些地方包含尾随逗号。这是规范
val json =
"""[
{
"sha":"7fd1a60b01f91b314f59955a4e4d4e80d8edf11d",
"commit":{
"author":{
"name":"The Octocat",
"email":"octocat@nowhere.com",
"date":"2012-03-06T23:06:50Z"
},
"committer":{
"name":"The Octocat",
"email":"octocat@nowhere.com",
"date":"2012-03-06T23:06:50Z"
},
"message":"Merge pull request #6 from Spaceghost/patch-1\n\nNew line at end of file."
},
"url":"https://api.github.com/repos/octocat/Hello-World/commits/7fd1a60b01f91b314f59955a4e4d4e80d8edf11d"
},
{
"sha":"762941318ee16e59dabbacb1b4049eec22f0d303",
"commit":{
"author":{
"name":"Johnneylee Jack Rollins",
"email":"johnneylee.rollins@gmail.com",
"date":"2011-09-14T04:42:41Z"
},
"committer":{
"name":"Johnneylee Jack Rollins",
"email":"johnneylee.rollins@gmail.com",
"date":"2011-09-14T04:42:41Z"
},
"message":"New line at end of file. --Signed off by Spaceghost"
},
"url":"https://api.github.com/repos/octocat/Hello-World/commits/762941318ee16e59dabbacb1b4049eec22f0d303"
}
]"""
case class Author(name: String, email: String, date: String)
case class Committer(name: String, email: String, date: String)
case class Commit(author: Author, committer: Committer, message: String)
case class Record(sha: String, commit: Commit, url: String)
decode[Seq[Record]](json) match {
case Right(records) => records.foreach(record => println(record.commit.author))
case Left(error) => println(error)
}
//Author(The Octocat,octocat@nowhere.com,2012-03-06T23:06:50Z)
//Author(Johnneylee Jack Rollins,johnneylee.rollins@gmail.com,2011-09-14T04:42:41Z)
像您这样的代码也可以工作:
val doc= parse(json).getOrElse(Json.Null)
doc.hcursor.downArray.downField("commit").downField("author").downField("name").as[String] match {
case Left(failure) => println(failure)
case Right(name) => println(name)
}
// The Octocat
你能提供更多的信息吗?响应的类型是什么?你们进口什么?