Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.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
将字符串json转换为Scala case类_Json_Scala - Fatal编程技术网

将字符串json转换为Scala case类

将字符串json转换为Scala case类,json,scala,Json,Scala,我知道这类问题已经被回答了很多次,但我找不到我所得到的错误的答案: 我正在尝试将字符串JSON转换为IntelliJ IDEA CE中的case类 代码如下所示: package com.netflix.ist.gbi.application import scala.io.Source import scala.collection.mutable._ import org.json4s._ //import org.json4s.DefaultFormats import com.netf

我知道这类问题已经被回答了很多次,但我找不到我所得到的错误的答案:

我正在尝试将字符串JSON转换为IntelliJ IDEA CE中的case类

代码如下所示:

package com.netflix.ist.gbi.application

import scala.io.Source
import scala.collection.mutable._
import org.json4s._
//import org.json4s.DefaultFormats
import com.netflix.ist.gbi.model.EventPayloadIn
import org.json4s.jackson.JsonMethods._

object ObjDataArchival extends App{
    val a : ListBuffer[String] = ListBuffer()
    for (line Source.fromFile("/Users/sankar.biswas/Desktop/jsonFile.json").getLines) {
       a.append(line)
       jsonStrToMap(line)
    }


    def jsonStrToMap(jsonStr: String) : EventPayloadIn = {
       implicit val formats : DefaultFormats.type = org.json4s.DefaultFormats
       parse(jsonStr).extract[EventPayloadIn]
    }


}
案例类在已导入的scala文件中定义。 但当我运行它时,我得到以下错误::

Exception in thread "main" java.lang.NoSuchMethodError: scala.Function0.$init$(Lscala/Function0;)V
at org.json4s.ThreadLocal.<init>(Formats.scala:348)
at org.json4s.DefaultFormats.$init$(Formats.scala:355)
at org.json4s.DefaultFormats$.<init>(Formats.scala:333)
at org.json4s.DefaultFormats$.<clinit>(Formats.scala)
at com.apple.ist.gbi.application.ObjDataArchival$.jsonStrToMap(ObjDataArchival.scala:21)
at com.apple.ist.gbi.application.ObjDataArchival$$anonfun$1.apply(ObjDataArchival.scala:16)
at com.apple.ist.gbi.application.ObjDataArchival$$anonfun$1.apply(ObjDataArchival.scala:13)
at scala.collection.Iterator$class.foreach(Iterator.scala:893)
at scala.collection.AbstractIterator.foreach(Iterator.scala:1336)
at com.apple.ist.gbi.application.ObjDataArchival$.delayedEndpoint$com$apple$ist$gbi$application$ObjDataArchival$1(ObjDataArchival.scala:13)
at com.apple.ist.gbi.application.ObjDataArchival$delayedInit$body.apply(ObjDataArchival.scala:10)
at scala.Function0$class.apply$mcV$sp(Function0.scala:34)
at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
at scala.App$$anonfun$main$1.apply(App.scala:76)
at scala.App$$anonfun$main$1.apply(App.scala:76)
at scala.collection.immutable.List.foreach(List.scala:381)
at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:35)
at scala.App$class.main(App.scala:76)
at com.apple.ist.gbi.application.ObjDataArchival$.main(ObjDataArchival.scala:10)
at com.apple.ist.gbi.application.ObjDataArchival.main(ObjDataArchival.scala)
我试过类似的句子,比如:

implicit val formats = DefaultFormats
但无法以任何方式解决问题


提前谢谢

下面这样的方法可以奏效

import org.json4s._
import org.json4s.jackson.JsonMethods._
import scala.io.Source

object JSONParsing extends App {


  implicit val formats = DefaultFormats // Brings in default date formats etc.

  case class BookDetails(bookId: String, bookName: String, authorName: String, authorCountry: String)

  for (line <- Source.fromFile("/Users/sankar.biswas/Desktop/jsonFile.json").getLines) {
    val bookDetails = jsonStrToMap(line)
    println(bookDetails)
  }

  def jsonStrToMap(jsonStr: String): BookDetails = {
    parse(jsonStr).camelizeKeys.extract[BookDetails]
  }
}
更新:

build.sbt

  "org.json4s" %% "json4s-native" % "3.5.2",
  "org.json4s" %% "json4s-jackson" % "3.6.0"

您好@KZapagol,非常感谢您花时间,尝试了您的建议,但得到了相同的错误,但是当我尝试在Scala REPL中运行代码时,它工作正常,我想它与IntelliJ有关!仍然无法找出错误。嗨..我也使用了IntelliJ,同样的代码工作正常。您可以分享您的案例类结构和json内容吗?在发送案例类和内容之前,让我告诉您,我已经尝试运行您在my IntelliJ中创建的对象“JSONParsing”,我得到了同样的错误。很奇怪..你是按原样使用JSONParsing代码还是修改了什么?你使用的是相同的json文件内容吗?是的,我是按原样使用代码。我认为它与IntelliJ有关,或者可能是我用于不同组件的版本彼此不兼容!
{"book_id":"1","book_name":"Scala","author_name":"Edward","author_country":"Poland"}
{"book_id":"1","book_name":"Scala","author_name":"Edward","author_country":"Poland"}
{"book_id":"1","book_name":"Scala","author_name":"Edward","author_country":"Poland"}
{"book_id":"1","book_name":"Scala","author_name":"Edward","author_country":"Poland"}
  "org.json4s" %% "json4s-native" % "3.5.2",
  "org.json4s" %% "json4s-jackson" % "3.6.0"