2017-10-15 112 views
0

我初学瑟茜,我想从这个JSON解析JSON阵列瑟茜

[ 
    { 
     "sha":"7fd1a60b01f91b314f59955a4e4d4e80d8edf11d", 
     "commit":{ 
     "author":{ 
      "name":"The Octocat", 
      "email":"[email protected]", 
      "date":"2012-03-06T23:06:50Z" 
     }, 
     "committer":{ 
      "name":"The Octocat", 
      "email":"[email protected]", 
      "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":"[email protected]", 
      "date":"2011-09-14T04:42:41Z" 
     }, 
     "committer":{ 
      "name":"Johnneylee Jack Rollins", 
      "email":"[email protected]", 
      "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") 
} 

你有什么想法吗?

在此先感谢,

+0

你能否提供一些更多的信息?什么类型是“响应”?你的进口是什么? – Tanjin

回答

1

您的json在某些地方包含尾随逗号。这是against规范。

val json = 
    """[ 
    { 
    "sha":"7fd1a60b01f91b314f59955a4e4d4e80d8edf11d", 
    "commit":{ 
     "author":{ 
     "name":"The Octocat", 
     "email":"[email protected]", 
     "date":"2012-03-06T23:06:50Z" 
    }, 
     "committer":{ 
     "name":"The Octocat", 
     "email":"[email protected]", 
     "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":"[email protected]", 
     "date":"2011-09-14T04:42:41Z" 
    }, 
     "committer":{ 
     "name":"Johnneylee Jack Rollins", 
     "email":"[email protected]", 
     "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,[email protected],2012-03-06T23:06:50Z) 
//Author(Johnneylee Jack Rollins,[email protected],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