Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Scala中解析对jsonarray的get请求_Json_Scala_Rest - Fatal编程技术网

在Scala中解析对jsonarray的get请求

在Scala中解析对jsonarray的get请求,json,scala,rest,Json,Scala,Rest,请求返回一个用户列表。如何在Scala中将其解析为json对象数组,以便访问对象字段,例如登录名、id等,您可以使用这些字段进行http调用并将json解码为Scala对象 val SttpVersion = "1.1.12" val circeVersion = "0.9.3" libraryDependencies ++= Seq( "com.softwaremill.sttp" %% "core" % SttpVersion, "com.softwaremill.sttp" %%

请求返回一个用户列表。如何在Scala中将其解析为json对象数组,以便访问对象字段,例如登录名、id等,您可以使用这些字段进行http调用并将json解码为Scala对象

val SttpVersion = "1.1.12"
val circeVersion = "0.9.3"

libraryDependencies ++= Seq(
  "com.softwaremill.sttp" %% "core" % SttpVersion,
  "com.softwaremill.sttp" %% "async-http-client-backend-future" % SttpVersion,

  "io.circe" %% "circe-core" % circeVersion,
  "io.circe" %% "circe-generic" % circeVersion,
  "io.circe" %% "circe-parser" % circeVersion
)
例如

object GetExample {

  import scala.concurrent.ExecutionContext.Implicits.global

  import com.softwaremill.sttp._
  import com.softwaremill.sttp.asynchttpclient.future._

  import io.circe._
  import io.circe.parser._

  implicit val backend = AsyncHttpClientFutureBackend()

  def main(args: Array[String]): Unit = {

    val usersResponse: Future[Response[String]] = sttp.get(uri"""https://api.github.com/users""").send()

    val users = usersResponse.map {
      case Response(Right(r), _, _, _, _) => parse(r).map { json =>
        val users: Option[Vector[Json]] = json.asArray.map(arr => arr.flatMap(_.\\("login")))
        users.getOrElse(Vector.empty[Json])
      }
      case Response(Left(l), _, _, _, _) => Vector.empty[Json]
    }

    println(users)
  }
}
如果您尝试REPL,结果如下

scala>     val users = usersResponse.map {
     |       case Response(Right(r), _, _, _, _) => parse(r).map { json =>
     |         val users: Option[Vector[Json]] = json.asArray.map(arr => arr.flatMap(_.\\("login")))
     |         users.getOrElse(Vector.empty[Json])
     |       }
     |       case Response(Left(l), _, _, _, _) => Vector.empty[Json]
     |     }
users: scala.concurrent.Future[Serializable with Equals] = Future(<not completed>)

scala> users
res1: scala.concurrent.Future[Serializable with Equals] = Future(Success(Right(Vector("mojombo", "defunkt", "pjhyett", "wycats", "ezmobius", "ivey", "evanphx", "vanpelt", "wayneeseguin", "brynary", "kevinclark", "technoweenie", "macournoyer", "takeo", "Caged", "topfunky", "anotherjesse", "roland", "lukas", "fanvsfan", "tomtt", "railsjitsu", "nitay", "kevwil", "KirinDave", "jamesgolick", "atmos", "errfree", "mojodna", "bmizerany"))))
scala>val users=usersResponse.map{
|案例响应(右(r),,,,,,)=>parse(r).map{json=>
|val用户:Option[Vector[Json]=Json.asArray.map(arr=>arr.flatMap(\.\(“登录”))
|users.getOrElse(Vector.empty[Json])
|       }
|案例响应(左(l),,,,,,)=>Vector.empty[Json]
|     }
用户:scala.concurrent.Future[Serializable with Equals]=Future()
scala>用户
res1:scala.concurrent.Future[可与Equals连载]=未来(右)(向量(“mojombo”、“defunkt”、“pjhyett”、“wycats”、“ezmobius”、“ivey”、“evanphx”、“vanpelt”、“wayneeseguin”、“brynary”、“kevinclark”、“technoweenie”、“macournoyer”、“take”、“Caged”、“topfunky”、“anotherjesse”、“roland”、“lukas”、“fanvsfan”、“tomtt”、“railsjitsu”、“nitay”)“凯夫维尔”、“基林达夫”、“詹姆斯戈立克”、“大气”、“无误差”、“莫乔纳”、“蓝宝石”(bmizerany)

对不起,我知道了。我必须添加libraryDependencies+=“ch.qos.logback”%”logback classic“%”1.1.3“%Runtime to build.sbtIt有效。但很抱歉,每秒都有一些输出。我怎样才能关掉它?