将字符串 json 转换为 Scala 案例类

桑卡尔

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

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

代码是这样的::

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.type = org.json4s.DefaultFormats

我尝试使用类似的行,例如 ::

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]
  }
}

jsonFile文件内容

{"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"}

更新 :

生成.sbt

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将格式错误的字符串转换为Scala类

如何将Scala案例类定义转换为Haskell?

Scala如何将案例类转换为函数?

如何将案例类转换为字符串

Scala案例类转换

使用Play JSON将嵌套的Scala对象转换为JSON字符串

将 Json 字符串转换为 Json 数组 Circe Scala?

Scala将Map [String,Long]转换为JSON或JSON字符串

在Scala中将案例类转换为CSV

Scala:将字符串数组解析为案例类

在 Scala 中将字符串转换为简单的 JSON

如何在Play Framework 2.3.x(Scala)中将案例类转换为JSON?

将 json 对象的字符串转换为 Scala 中的数组

如何将Scala Map转换为JSON字符串?

将Dataset中的嵌套json字符串转换为Spark Scala中的Dataset / Dataframe

当类未使用JSON字符串提供的所有属性时,将JSON字符串转换为类

使用elemental.json。*类将HashMap转换为JSON字符串

将字符串转换为JSON

Scala 无形:如何将 hlist.Mapper 转换为案例类?

如何将案例类数据列表转换为字符串数据列表?

使用管道分隔符将案例类转换为字符串

C#-如何将json字符串转换为类

如何在C ++中使用Boost库将类对象转换为json字符串?

如何将Json字符串转换为c#类对象?

如何将类元数据转换为JSON字符串

使用gson库将Scala类转换为字符串时,不会转义UTF-8字符

Apache Spark:将具有JSON字符串的列转换为Scala spark中的新数据框

Scala Spark如何将列array [string]转换为带有JSON数组的字符串?

将字符串转换为脊柱案例