Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在scala中为每个对象添加额外的json项_Json_Scala - Fatal编程技术网

如何在scala中为每个对象添加额外的json项

如何在scala中为每个对象添加额外的json项,json,scala,Json,Scala,我正在编写一个简单的scala应用程序,它打开一个json数据的平面文件,对其进行解析,最后将其打印到屏幕上 下一步将要求我在每个对象处停止,并在其前面添加另一项(字符串)。我的问题是如何在此列表中为每个对象添加新字符串 以下是我的JSON实现(归功于init作者) 然后得到json内容的有效println。相反,我想给这个解析方法传递一个字符串,并让它附加它,或者创建一个新的json对象,其中每个对象的前面都有一个字符串 更新 我当前的尝试如下所示 class JSONTest extends

我正在编写一个简单的scala应用程序,它打开一个json数据的平面文件,对其进行解析,最后将其打印到屏幕上

下一步将要求我在每个对象处停止,并在其前面添加另一项(字符串)。我的问题是如何在此列表中为每个对象添加新字符串

以下是我的JSON实现(归功于init作者)

然后得到json内容的有效println。相反,我想给这个解析方法传递一个字符串,并让它附加它,或者创建一个新的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[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
  }
}