Преобразование строки json в класс case Scala

Я знаю, что на этот вопрос отвечали так много раз, но я не мог найти ответ на ошибку, которую я получаю ::

Я пытаюсь преобразовать строку JSON в класс case в 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]
    }


}

Классы case определены в импортированном файле 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

Но никак не мог решить проблему.

Заранее спасибо!

Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
0
0
1 340
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Что-то вроде ниже может работать.

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

Обновлять :

build.sbt

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

Привет @KZapagol, большое спасибо, что нашли время, попробовал ваше предложение, но получил ту же ошибку, но пока я пытаюсь запустить код в Scala REPL, он работает нормально, я полагаю, это как-то связано с IntelliJ! до сих пор не могу понять ошибку.

Sankar 10.03.2019 00:30

Привет. Я также использовал IntelliJ, и тот же код работает нормально. Не могли бы вы поделиться структурой класса вашего дела и содержимым json.

KZapagol 10.03.2019 04:06

хорошо, прежде чем отправлять класс и содержимое случая, позвольте мне сообщить вам, что я попытался запустить объект «JSONParsing», который вы создали в моем IntelliJ, и я получаю ту же ошибку.

Sankar 10.03.2019 04:32

Это странно... вы использовали код JSONParsing как есть или что-то изменили? Вы используете то же содержимое файла json?

KZapagol 10.03.2019 04:38

Да, я использую код как есть. Я думаю, что это как-то связано с IntelliJ, или, возможно, версия, которую я использую для разных компонентов, несовместима друг с другом!

Sankar 10.03.2019 04:51

Я использовал "org.json4s" %% "json4s-native" % "3.5.2", "org.json4s" %% "json4s-jackson" % "3.6.0" эти версии. Пожалуйста, перестройте свой проект и попробуйте. Код успешно запустился и сейчас. Я не могу вставить снимок экрана.

KZapagol 10.03.2019 05:08

Давайте продолжить обсуждение в чате.

KZapagol 10.03.2019 05:14

Другие вопросы по теме