/ / Ako používať dispatch.json vo výťahovom projekte - scala, lift, scala-dispečing

Ako používať dispatch.json v projekte výťahov - scala, lift, scala-dispatch

Som zmätený, ako skombinovať knižnicu json v expedícii a zdvihnúť, aby som analyzoval moju odpoveď json.

Som očividne nováčik zo škály.

Napísal som tento kód:

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

Teraz som prilepená na tom, ako analyzovať twitter json odpoveď

Pokúsil som sa použiť JsonParser:

val status1 = JsonParser.parse(status)

ale dostal som túto chybu:

<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 som si istý a nedokážem prísť na to, čo robiť ďalej, aby som mohol dáta iterovať, extrahovať a vykresliť na moju webovú stránku.

odpovede:

5 pre odpoveď č. 1

Chyba, ktorú sa vraciate, vás informuje, že typ status nie je String alebo java.io.Reader, Namiesto toho už máte zoznamanalyzoval odpovede JSON, pretože dispečing už vykonal všetku ťažkú ​​prácu pri analýze odpovede na odpoveď JSON. Expedícia má veľmi kompaktnú syntax, ktorá je pekná, keď ste na ňu zvyknutí, ale spočiatku môže byť veľmi tupá, najmä keď sa prvýkrát približujete k spoločnosti Scala. Často zistíte, že keď sa prvýkrát učíte vidieť, čo sa deje, musíte sa ponoriť do zdrojového kódu knižnice. Napríklad, ak sa pozriete do zdrojového kódu expedičného-twitteru, môžete vidieť, že timeline metóda skutočne vykoná extrakciu JSON pri odpovedi:

def timeline = this ># (list ! obj)

Táto metóda definuje spôsob odoslaniaObslužný program, ktorý prevádza objekt Response na objekt JsonResponse a potom analyzuje odpoveď do zoznamu objektov JSON. To sa trochu deje v jednom riadku. Môžete vidieť definíciu operandu ># v JsHttp.scala súbor v module http + json Dispatch. Expedícia definuje množstvo obslužných programov, ktoré prevádzajú konverziu v zákulisí na rôzne typy údajov, s ktorými môžete blokovať prácu. Pozrite sa na Návod StdOut a Spoločné úlohy stránky pre niektoré manipulátory, ale budete sa musieť ponoriť do rôznych modulov zdrojový kód alebo Scaladoc vidieť, čo ešte existuje.

To všetko je dlhá cesta k tomu, čo chcete, čo je podľa mňa v podstate toto:

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

Iba namiesto toho println, môžete ju vytlačiť na svoju webovú stránku ľubovoľným spôsobom. Pozrite sa na Stavový objekt pre niektoré z rôznych vopred zostavených extraktorov, aby vytiahli informácie zo odpovede na stav.


6 pre odpoveď č. 2

Toto je ďalší spôsob použitia protokolu odosielania protokolu HTTP s technológiou Lift-JSON. Tento príklad načíta dokument JSON od spoločnosti Google, analyzuje z neho všetky „tituly“ a vytlačí ich.

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)
}