使用 Scala 2.8 和 Lift 2.2。
我正在调用 Github API 并为用户请求存储库。当用户的 repos 少于 30 个时,会进行一次调用,并且不需要连接 JValue。但是,当用户有超过 30 个 repos 时,会进行多次调用。我想从这些调用中连接这些结果,然后将它们“展平”。即 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))
}