如何在scala中为每个对象添加额外的json项
我正在编写一个简单的scala应用程序,它打开一个json数据的平面文件,对其进行解析,最后将其打印到屏幕上 下一步将要求我在每个对象处停止,并在其前面添加另一项(字符串)。我的问题是如何在此列表中为每个对象添加新字符串 以下是我的JSON实现(归功于init作者) 然后得到json内容的有效println。相反,我想给这个解析方法传递一个字符串,并让它附加它,或者创建一个新的json对象,其中每个对象的前面都有一个字符串 更新 我当前的尝试如下所示如何在scala中为每个对象添加额外的json项,json,scala,Json,Scala,我正在编写一个简单的scala应用程序,它打开一个json数据的平面文件,对其进行解析,最后将其打印到屏幕上 下一步将要求我在每个对象处停止,并在其前面添加另一项(字符串)。我的问题是如何在此列表中为每个对象添加新字符串 以下是我的JSON实现(归功于init作者) 然后得到json内容的有效println。相反,我想给这个解析方法传递一个字符串,并让它附加它,或者创建一个新的json对象,其中每个对象的前面都有一个字符串 更新 我当前的尝试如下所示 class JSONTest extends
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[Map[String,Any]])
println(parseAll(value,reader).map(addHeader(uu.asInstanceOf[map[String,Any]],header)))
及
错误:没有足够的参数用于方法addHeader:(xyz:Map[String,Any],header:(String,Any))Map[String,Any]。
未指定的值参数头。
大小写(k,m:Map[String,Any])=>(k,addHeader(m))
任何帮助都将不胜感激(提前感谢!)您是否尝试过在解析器输出上使用
map
编辑:这在我的机器上编译
import java.io.FileReader
import scala23.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(_, header)))
}
def addHeader(xyz:Any, header:(String, Any)):Any = xyz match {
case obj:Map[String, Any] => obj.map {
case (k, m:Map[String, Any]) => (k, addHeader(m, header))
case e => e
} + header
case arr:List[Any] => arr.map(addHeader(_, header))
case e => e
}
}
它应该能够更好地处理解析的各种输出。您能否为addHeader方法提供完整的工作语法。当前符号不正确(intellij显示错误:类型映射使用类型参数)在这一行println(parseAll(value,reader)。Map(addHeader(u,header)))我得到语法错误:发现类型不匹配:Any,required:Map[String,Any]-我如何告诉header是Map[String,Any]?@JimmyBond:它实际上在parseAll的输出上。尝试println(parseAll(value,reader).map(addHeader(u.asInstanceOf[map[String,Any]],header))。我应该提到我使用的是Scala 2.8.1,但它仍然不起作用(我目前使用的完整sln在上面)@JimmyBond:My bad。我没有正确处理列表或地图,这激怒了打字系统。是的,静态类型!
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
}
}
import java.io.FileReader
import scala23.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(_, header)))
}
def addHeader(xyz:Any, header:(String, Any)):Any = xyz match {
case obj:Map[String, Any] => obj.map {
case (k, m:Map[String, Any]) => (k, addHeader(m, header))
case e => e
} + header
case arr:List[Any] => arr.map(addHeader(_, header))
case e => e
}
}