我正在編寫一個簡單的scala應用程序,該應用程序打開json數據的平面文件,對其進行解析並最終將其打印到屏幕上。如何在scala中爲每個對象添加額外的json項目
下一步將要求我停在每個對象上並在其前面添加另一個項目(字符串)。我的問題是如何在這個列表中添加每個對象的新字符串?
以下是我的JSON實現(幸得INIT筆者here)
import scala.util.parsing.combinator._
class JSON extends JavaTokenParsers {
def obj: Parser[Map[String, Any]] =
"{"~> repsep(member, ",") <~"}" ^^ (Map() ++ _)
def arr: Parser[List[Any]] =
"["~> repsep(value, ",") <~"]"
def member: Parser[(String, Any)] =
stringLiteral~":"~value ^^
{ case name~":"~value => (name, value) }
def value: Parser[Any] = (
obj
| arr
| stringLiteral
| floatingPointNumber ^^ (_.toInt)
| "null" ^^ (x => null)
| "true" ^^ (x => true)
| "false" ^^ (x => false)
)
}
下一個我稱之爲W/A平面文件,像這樣
import java.io.FileReader
import scala23.JSON
class JSONTest extends JSON {
def main(args: String) {
val reader = new FileReader(args)
println(parseAll(value, reader))
}
}
然後我得到一個有效的println的json內容。相反,我想通過這個解析方法的字符串,並將它添加它,或者創建具有在每個對象的內部
更新
我現在嘗試前面的字符串的新JSON對象看起來像下面
class JSONTest extends JSON {
def main(args: String) {
val reader = new FileReader(args)
val header = ("abc", "def")
// println(parseAll(value, reader).map(addHeader(_, header)))
println(parseAll(value, reader).map(addHeader(_.asInstanceOf[Map[String, Any]], header)))
}
def addHeader(xyz:Map[String, Any], header:(String, Any)):Map[String, Any] = {
xyz.map {
case (k, m:Map[String, Any]) => (k, addHeader(m))
case e => e
} + header
}
}
但我目前得到的IntelliJ中的一個
一些錯誤錯誤:缺少用於擴展函數參數類型((X $ 1)=> X $ 1.asInstanceOf [地圖[字符串,任何]]) 的println(parseAll(值,讀取器).MAP(的addHeader(_ asInstanceOf [地圖[字符串,任何],報頭)。))
AND
錯誤:不夠論據方法addHeader:(xyz:Map [String,Any],header:(String,Any))Map [String,Any]。 未指定的值參數標頭。 情況下(K,M:地圖[字符串,任何])=>(K,的addHeader(M))
任何幫助將非常感激(感謝你在前進!)
您能否爲addHeader方法提供完整的工作語法。當前標誌不正確(intellij顯示錯誤:類型Map需要類型參數) – JimmyBond 2011-01-21 20:15:57