Pergunta

Usando Scala 2.8 e Lift 2.2.

Estou ligando para a API do Github e solicitando repositórios para um usuário.Quando o usuário possui menos de 30 repositórios uma chamada é feita e não há necessidade de concatenar JValues.Porém, quando o usuário possui mais de 30 repositórios, múltiplas chamadas são feitas.Gostaria de concatenar esses resultados dessas chamadas e depois “nivelá-los”.ou sejaO nome dos "repositórios" em um JValue deve retornar todos os repositórios, não apenas os primeiros 30.

O código abaixo retorna o seguinte:Array(List(JObject(List(JField(repositórios,JArray(...JObject(List(JField(repositórios,JArray...)))))))))

O que eu quero é:Array(List(JObject(List(JField(repositories,JArray(....))))) onde o nome dos repositórios aponta para todos dos repositórios.

Eu lutei com isso um pouco e não consigo entender.

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))
}
Foi útil?

Solução

A função 'mesclagem' deve mesclar esses JSONs como você descreveu:

parse(line1) merge parse(line2)

Ou mais genericamente:

List(json1, json2, ...).foldLeft(JNothing: JValue)(_ merge _)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top