/ / डिस्पैच का उपयोग कैसे करें। लिफ्ट परियोजना में आगजनी - स्कैला, लिफ्ट, स्काला-डिस्पैच

लिफ्ट प्रोजेक्ट में dispatch.json का उपयोग कैसे करें - स्कैला, लिफ्ट, स्कैला-प्रेषण

मैं उलझन में कैसे जुसन लाइब्रेरी को जोड़ने और अपने जौनस प्रतिक्रिया को पार्स करने के लिए लिफ्ट करने पर उलझन में हूं।

मैं स्पष्ट रूप से एक scala नौसिखिया हूँ।

मैंने यह कोड लिखा है:

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

अब मैं इस बात पर अड़ा हुआ हूं कि ट्विटर जसन की प्रतिक्रिया को कैसे पार्स किया जाए

मैंने JsonParser का उपयोग करने की कोशिश की है:

val status1 = JsonParser.parse(status)

लेकिन यह त्रुटि मिली:

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

मैं अनिश्चित हूं और डेटा के माध्यम से पुनरावृत्त करने के लिए आगे क्या करना है, इसका पता लगा सकता हूं, इसे निकाल सकता हूं और इसे मेरे वेब पेज पर प्रस्तुत कर सकता हूं।

उत्तर:

जवाब के लिए 5 № 1

त्रुटि जो आपको वापस मिल रही है वह आपके प्रकार के बारे में बता रही है status न तो स्ट्रिंग है या java.io.Reader। इसके बजाय, जो आपके पास है वह पहले से ही एक सूची हैडिस्पैच के रूप में पार्स किए गए JSON प्रतिक्रियाओं को पहले ही JSON प्रतिक्रिया में प्रतिक्रिया पार्स करने में पूरी मेहनत की है। डिस्पैच में एक बहुत ही कॉम्पैक्ट सिंटैक्स होता है, जो तब अच्छा होता है जब आप इसके लिए अभ्यस्त होते हैं, लेकिन यह शुरू में बहुत अप्रिय हो सकता है, खासकर जब आप पहली बार स्काला से संपर्क कर रहे हों। अक्सर बार, आपको लगता है कि आपको लाइब्रेरी के स्रोत कोड में गोता लगाना होगा, जब आप पहली बार देखना सीख रहे होंगे कि क्या चल रहा है। उदाहरण के लिए, यदि आप प्रेषण-ट्विटर स्रोत कोड देखते हैं, तो आप देख सकते हैं। timeline तरीका वास्तव में प्रतिक्रिया पर JSON निष्कर्षण करता है:

def timeline = this ># (list ! obj)

इस विधि को परिभाषित करना एक डिस्पैच हैहैंडलर जो रिस्पांस ऑब्जेक्ट को JsonResponse ऑब्जेक्ट में परिवर्तित करता है, और फिर प्रतिक्रिया को JSON ऑब्जेक्ट्स की सूची में पार्स करता है। यह काफी एक पंक्ति में चल रहा है। आप ऑपरेंड के लिए परिभाषा देख सकते हैं ># में JsHttp.scala http + json डिस्पैच मॉड्यूल में फ़ाइल। डिस्पैच बहुत सारे हैंडलर को परिभाषित करता है जो विभिन्न प्रकार के डेटा में पर्दे के पीछे एक रूपांतरण करते हैं जिसे आप काम करने के लिए ब्लॉक करने के लिए पास कर सकते हैं। इसकी जाँच पड़ताल करो StdOut वॉकथ्रू और यह सामान्य कार्य कुछ संचालकों के लिए पृष्ठ लेकिन आपको "विभिन्न मॉड्यूल स्रोत कोड या स्कैलाडॉक में गोता लगाने की आवश्यकता है कि यह देखने के लिए कि और क्या है।"

यह सब आप जो चाहते हैं उसे पाने के लिए एक लंबा रास्ता है, जो मेरा मानना ​​है कि यह अनिवार्य रूप से है:

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

केवल ए करने के बजाय println, आप इसे अपने वेब पेज पर धकेल सकते हैं जो भी आप चाहते हैं। इसकी जाँच पड़ताल करो स्थिति वस्तु विभिन्न पूर्व-निर्मित एक्सट्रैक्टर्स में से कुछ के लिए स्थिति प्रतिक्रिया से बाहर जानकारी खींचने के लिए।


जवाब के लिए 6 № 2

यहाँ लिफ्ट-जेएसएन के साथ डिस्पैच HTTP का उपयोग करने का एक और तरीका है। यह उदाहरण Google से JSON दस्तावेज़ प्राप्त करता है, इसमें से सभी "शीर्षक" पार्स करता है और उन्हें प्रिंट करता है।

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