1

Scala2.8とLift2.2を使用します。

Github APIを呼び出して、ユーザーのリポジトリをリクエストしています。ユーザーのリポジトリが30未満の場合、1回の呼び出しが行われ、JValueを連結する必要はありません。ただし、ユーザーが30を超えるリポジトリを持っている場合、複数の呼び出しが行われます。これらの呼び出しからのこれらの結果を連結してから、それらを「フラット化」したいと思います。つまり、JValueの「リポジトリ」名は、最初の30だけでなくすべてのリポジトリを返す必要があります。

以下のコードは次を返します:Array(List(JObject(List(JField(repositories、JArray(... JObject(List(JField(repositories、JArray ...)))))))))

私が欲しいのは:Array(List(JObject(List(JField(repositories、JArray(....)))))ここで、リポジトリ名はすべてのリポジトリを指します。

私はこれに少し取り組んできましたが、うまくいかないようです。

import java.io._
import net.liftweb.json.JsonAST._
import net.liftweb.json.JsonParser._
import org.apache.http.client.methods.HttpGet
import org.apache.http.impl.client.{ DefaultHttpClient }

object Github extends Application {
  implicit val formats = net.liftweb.json.DefaultFormats

  val client = new DefaultHttpClient()

  var repos = JArray(List[JValue]())

  //Pick on mojombo since he has 30+ repos requires to calls to API
  var method = new HttpGet("http://github.com/api/v2/json/repos/show/" + "mojombo" +   "?page=1")

  var response = client.execute(method)

  var instream = response.getEntity.getContent();
  var reader = new BufferedReader(new InputStreamReader(instream))
  var line1 = reader.readLine

  method = new HttpGet("http://github.com/api/v2/json/repos/show/" + "mojombo" + "?page=2")

  response = client.execute(method)

  instream = response.getEntity.getContent();
  reader = new BufferedReader(new InputStreamReader(instream))
  val line2 = reader.readLine

  println(parse(line1) ++ parse(line2))
}
4

1 に答える 1

4

関数 'merge' は、説明したようにこれらの JSON をマージする必要があります。

parse(line1) merge parse(line2)

またはより一般的に:

List(json1, json2, ...).foldLeft(JNothing: JValue)(_ merge _)
于 2011-02-18T07:43:12.080 に答える