我正在使用IntelliJ IDEA 15中的Scala並嘗試解析大型Twitter記錄json文件並計算標籤總數。我對Scala和函數式編程的想法都很陌生。 json文件中的每一行都是一個json對象(表示推文)。文件中的每一行開頭就像這樣:使用Scala和JSON4S解析大型JSON文件
{"in_reply_to_status_id":null,"text":"To my followers sorry..
{"in_reply_to_status_id":null,"text":"#victory","in_reply_to_screen_name"..
{"in_reply_to_status_id":null,"text":"I'm so full I can't move"..
我最感興趣的是所謂的「實體」屬性,它包含了一個名爲「hastags」有井號標籤的列表屬性。這裏是一個例子:
"entities":{"hashtags":[{"text":"thewayiseeit","indices":[0,13]}],"user_mentions":[],"urls":[]},
我瀏覽了各種scala框架來解析json並決定使用json4s。我在我的Scala腳本中有以下代碼。
import org.json4s.native.JsonMethods._
var json: String = ""
for (line <- io.Source.fromFile("twitter38.json").getLines) json += line
val data = parse(json)
我在這裏的邏輯是,我試圖讀取twitter38.json每一行成一個字符串,然後解析與解析整個字符串()。解析函數拋出一個錯誤聲稱:
「類型不匹配,預期:沒有,找到:字符串。」
我已經看到,在裝有JSON對象如
val jsontest =
"""{
|"name" : "bob",
|"age" : "50",
|"gender" : "male"
|}
""".stripMargin
val data = parse(jsontest)
字符串使用解析()的例子,但我已經接收到同樣的錯誤。我來自一個面向對象的編程背景,我遇到這個問題的方式有什麼根本性的錯誤嗎?
您的測試看起來正確。可能錯誤隱藏在其他地方。嘗試隔離你的測試。在REPL中嘗試它,或者創建只有一個依賴項的單獨項目(「org.json4s」%%「json4s-native」%「3.3.0」)。也可以在IDE的'parse'方法中嘗試「去聲明」,以確保它是從正確的範圍導入的。 – Aivean
此外,還有一些其他與您的數據處理方式無關的問題。而不是將輸入連接在一起(順便說一下,你正在以昂貴的O(N^2)方式進行),你最好分別解析每條json線,結束提取必要的數據。它會更快,消耗更少的內存。 – Aivean