/ / Jak korzystać z dispatch.json w projekcie windy - scala, lift, scala-dispatch

Jak korzystać z dispatch.json w projekcie windy - scala, lift, scala-dispatch

jestem zdezorientowany, jak połączyć bibliotekę json w wysyłce i podnieść, aby przeanalizować moją odpowiedź json.

Najwyraźniej jestem początkującym Scala.

Napisałem ten kod:

val status = {
val httpPackage = http(Status(screenName).timeline)
val json1 = httpPackage
json1
}

Teraz utknąłem na tym, jak przeanalizować odpowiedź twitter Json

Próbowałem użyć JsonParser:

val status1 = JsonParser.parse(status)

ale dostałem ten błąd:

<console>:38: error: overloaded method value parse with alternatives:
(s: java.io.Reader)net.liftweb.json.JsonAST.JValue<and>
(s: String)net.liftweb.json.JsonAST.JValue
cannot be applied to (http.HttpPackage[List[dispatch.json.JsObject]])
val status1 = JsonParser.parse(status1)

Nie jestem pewien i nie mogę się dowiedzieć, co dalej zrobić, aby przejść przez dane, wyodrębnić je i wyrenderować na mojej stronie internetowej.

Odpowiedzi:

5 dla odpowiedzi № 1

Błąd, który otrzymujesz, polega na informowaniu, że typ status nie jest ciągiem ani java.io.Reader. Zamiast tego masz już listęprzeanalizował odpowiedzi JSON, ponieważ Dispatch wykonał już całą ciężką pracę nad parsowaniem odpowiedzi w odpowiedzi JSON. Dispatch ma bardzo zwartą składnię, co jest miłe, gdy się do tego przyzwyczaisz, ale początkowo może być bardzo tępy, szczególnie gdy zbliżasz się do Scali. Często zdarza się, że musisz zanurzyć się w kodzie źródłowym biblioteki, kiedy uczysz się, co się dzieje. Na przykład, jeśli zajrzysz do kodu źródłowego twittera, możesz zauważyć, że timeline metoda faktycznie wykonuje ekstrakcję JSON dla odpowiedzi:

def timeline = this ># (list ! obj)

To, co ta metoda definiuje, to WysłanieProcedura obsługi, która przekształca obiekt Response w obiekt JsonResponse, a następnie analizuje odpowiedź na listę obiektów JSON. To trochę się dzieje w jednej linii. Możesz zobaczyć definicję argumentu ># w JsHttp.scala plik w module http + json Dispatch. Dispatch definiuje wiele programów obsługi, które dokonują konwersji za kulisami na różne typy danych, które można następnie przekazać do bloku w celu pracy. Sprawdź Przewodnik po StdOut i Zwykłe zadania stron dla niektórych programów obsługi, ale musisz zagłębić się w kod źródłowy różnych modułów lub Scaladoc, aby zobaczyć, co jeszcze tam jest.

Wszystko to jest długa droga do osiągnięcia tego, czego chcesz, co moim zdaniem jest zasadniczo następujące:

val statuses = http(Status(screenName).timeline)
statuses.map(Status.text).foreach(println _)

Tylko zamiast robić println, możesz wypchnąć go na swoją stronę internetową w dowolny sposób. Sprawdź Obiekt statusu dla niektórych z różnych wbudowanych ekstraktorów w celu wyciągnięcia informacji z odpowiedzi statusu.


6 dla odpowiedzi nr 2

Oto inny sposób użycia Dispatch HTTP z Lift-JSON. Ten przykład pobiera dokument JSON z Google, analizuje z niego wszystkie „tytuły” i drukuje je.

import dispatch._
import net.liftweb.json.JsonParser
import net.liftweb.json.JsonAST._

object App extends Application {
val http = new Http
val req = :/("www.google.com") / "base" / "feeds" / "snippets" <<? Map("bq" -> "scala", "alt" -> "json")
val json = http(req >- JsonParser.parse)

val titles = for {
JField("title", title) <- json
JField("$t", JString(name)) <- title
} yield name

titles.foreach(println)
}