简体   繁体   English

提取时出现JSON4S错误[T]

[英]JSON4S error at extract[T]

i am using json4s to extract data according to case class but i am getting a "unknown error". 我正在使用json4s根据案例类提取数据,但是我遇到了“未知错误”。 My scala version is 2.10.2 and Json4S is 3.2.10 我的Scala版本是2.10.2,而Json4S是3.2.10

My code look like: 我的代码如下:

import org.json4s._
import org.json4s.jackson.JsonMethods._ 
implicit val formats = org.json4s.DefaultFormats

case class Person(name: String, age: Int)

class user{

def add(){
val json="""{"1":{"name":"user1", "age":16}}"""

    print(parse(json).extract[Map[String,Person]])
}
}

Could any one suggest What i am missing here? 有人可以建议我在这里缺少什么吗?

I tried based on the suggestion given here: JSON4S unknown error https://github.com/json4s/json4s/issues/125 我根据此处给出的建议进行了尝试: JSON4S未知错误 https://github.com/json4s/json4s/issues/125

But I still get following error: 但是我仍然收到以下错误:

java.lang.NoSuchMethodError: scala.collection.immutable.$colon$colon.hd$1()Ljava/lang/Object;
    at org.json4s.MonadicJValue.$bslash(MonadicJValue.scala:18)
    at org.json4s.Extraction$ClassInstanceBuilder$$anonfun$14.apply(Extraction.scala:463)
    at org.json4s.Extraction$ClassInstanceBuilder$$anonfun$14.apply(Extraction.scala:463)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:245)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:245)
    at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)
    at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:245)
    at scala.collection.AbstractTraversable.map(Traversable.scala:104)
    at org.json4s.Extraction$ClassInstanceBuilder.org$json4s$Extraction$ClassInstanceBuilder$$instantiate(Extraction.scala:451)
    at org.json4s.Extraction$ClassInstanceBuilder$$anonfun$result$6.apply(Extraction.scala:491)
    at org.json4s.Extraction$ClassInstanceBuilder$$anonfun$result$6.apply(Extraction.scala:488)
    at org.json4s.Extraction$.org$json4s$Extraction$$customOrElse(Extraction.scala:500)
    at org.json4s.Extraction$ClassInstanceBuilder.result(Extraction.scala:488)
    at org.json4s.Extraction$.extract(Extraction.scala:332)
    at org.json4s.Extraction$$anonfun$extract$5.apply(Extraction.scala:316)
    at org.json4s.Extraction$$anonfun$extract$5.apply(Extraction.scala:316)
    at scala.collection.immutable.List.map(List.scala:273)
    at org.json4s.Extraction$.extract(Extraction.scala:316)
    at org.json4s.Extraction$.extract(Extraction.scala:42)
    at org.json4s.ExtractableJsonAstNode.extract(ExtractableJsonAstNode.scala:21)
    at com.czechscala.blank.HttpMethods.parseJsonResponse(HttpMethods.scala:87)
    at com.czechscala.blank.HttpMethods.getRequestFunction(HttpMethods.scala:184)
    at com.czechscala.blank.Hello$$anonfun$sendParallelRequests$1$$anonfun$apply$mcVI$sp$1$$anonfun$apply$mcV$sp$1.apply$mcV$sp(Hello.scala:68)
    at com.czechscala.blank.Hello$$anonfun$sendParallelRequests$1$$anonfun$apply$mcVI$sp$1$$anonfun$apply$mcV$sp$1.apply(Hello.scala:64)
    at com.czechscala.blank.Hello$$anonfun$sendParallelRequests$1$$anonfun$apply$mcVI$sp$1$$anonfun$apply$mcV$sp$1.apply(Hello.scala:64)
    at scala.concurrent.impl.ExecutionContextImpl$DefaultThreadFactory$$anon$2$$anon$4.block(ExecutionContextImpl.scala:48)
    at scala.concurrent.forkjoin.ForkJoinPool.managedBlock(ForkJoinPool.java:3640)
    at scala.concurrent.impl.ExecutionContextImpl$DefaultThreadFactory$$anon$2.blockOn(ExecutionContextImpl.scala:45)
    at scala.concurrent.package$.blocking(package.scala:123)
    at com.czechscala.blank.Hello$$anonfun$sendParallelRequests$1$$anonfun$apply$mcVI$sp$1.apply$mcV$sp(Hello.scala:64)
    at com.czechscala.blank.Hello$$anonfun$sendParallelRequests$1$$anonfun$apply$mcVI$sp$1.apply(Hello.scala:64)
    at com.czechscala.blank.Hello$$anonfun$sendParallelRequests$1$$anonfun$apply$mcVI$sp$1.apply(Hello.scala:64)
    at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24)
    at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24)
    at scala.concurrent.impl.ExecutionContextImpl$AdaptedForkJoinTask.exec(ExecutionContextImpl.scala:121)
    at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
    at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
    at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
    at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
java.lang.NoSuchMethodError: scala.collection.immutable.$colon$colon.hd$1()Ljava/lang/Object;
    at org.json4s.MonadicJValue.$bslash(MonadicJValue.scala:18)
    at org.json4s.Extraction$ClassInstanceBuilder$$anonfun$14.apply(Extraction.scala:463)
    at org.json4s.Extraction$ClassInstanceBuilder$$anonfun$14.apply(Extraction.scala:463)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:245)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:245)
    at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)
    at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:245)
    at scala.collection.AbstractTraversable.map(Traversable.scala:104)
    at org.json4s.Extraction$ClassInstanceBuilder.org$json4s$Extraction$ClassInstanceBuilder$$instantiate(Extraction.scala:451)
    at org.json4s.Extraction$ClassInstanceBuilder$$anonfun$result$6.apply(Extraction.scala:491)
    at org.json4s.Extraction$ClassInstanceBuilder$$anonfun$result$6.apply(Extraction.scala:488)
    at org.json4s.Extraction$.org$json4s$Extraction$$customOrElse(Extraction.scala:500)
    at org.json4s.Extraction$ClassInstanceBuilder.result(Extraction.scala:488)
    at org.json4s.Extraction$.extract(Extraction.scala:332)
    at org.json4s.Extraction$$anonfun$extract$5.apply(Extraction.scala:316)
    at org.json4s.Extraction$$anonfun$extract$5.apply(Extraction.scala:316)
    at scala.collection.immutable.List.map(List.scala:273)
    at org.json4s.Extraction$.extract(Extraction.scala:316)
    at org.json4s.Extraction$.extract(Extraction.scala:42)
    at org.json4s.ExtractableJsonAstNode.extract(ExtractableJsonAstNode.scala:21)
    at com.czechscala.blank.HttpMethods.parseJsonResponse(HttpMethods.scala:87)
    at com.czechscala.blank.HttpMethods.getRequestFunction(HttpMethods.scala:184)
    at com.czechscala.blank.Hello$$anonfun$sendParallelRequests$1$$anonfun$apply$mcVI$sp$1$$anonfun$apply$mcV$sp$1.apply$mcV$sp(Hello.scala:68)
    at com.czechscala.blank.Hello$$anonfun$sendParallelRequests$1$$anonfun$apply$mcVI$sp$1$$anonfun$apply$mcV$sp$1.apply(Hello.scala:64)
    at com.czechscala.blank.Hello$$anonfun$sendParallelRequests$1$$anonfun$apply$mcVI$sp$1$$anonfun$apply$mcV$sp$1.apply(Hello.scala:64)
    at scala.concurrent.impl.ExecutionContextImpl$DefaultThreadFactory$$anon$2$$anon$4.block(ExecutionContextImpl.scala:48)
    at scala.concurrent.forkjoin.ForkJoinPool.managedBlock(ForkJoinPool.java:3640)
    at scala.concurrent.impl.ExecutionContextImpl$DefaultThreadFactory$$anon$2.blockOn(ExecutionContextImpl.scala:45)
    at scala.concurrent.package$.blocking(package.scala:123)
    at com.czechscala.blank.Hello$$anonfun$sendParallelRequests$1$$anonfun$apply$mcVI$sp$1.apply$mcV$sp(Hello.scala:64)
    at com.czechscala.blank.Hello$$anonfun$sendParallelRequests$1$$anonfun$apply$mcVI$sp$1.apply(Hello.scala:64)
    at com.czechscala.blank.Hello$$anonfun$sendParallelRequests$1$$anonfun$apply$mcVI$sp$1.apply(Hello.scala:64)
    at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24)
    at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24)
    at scala.concurrent.impl.ExecutionContextImpl$AdaptedForkJoinTask.exec(ExecutionContextImpl.scala:121)
    at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
    at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
    at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
    at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)

My build.sbt: 我的build.sbt:

name := "blank"

version := "1.0-SNAPSHOT"

scalaVersion := "2.10.2"

libraryDependencies ++= Seq (
    "org.scalatest" % "scalatest_2.10" % "1.9.1" % "test"
)

libraryDependencies ++= Seq(
  "com.typesafe.akka" %% "akka-actor" % "2.1.2"
)

libraryDependencies ++= Seq(
  "net.databinder" %% "dispatch" % "0.8.10"
)

libraryDependencies ++= Seq(
  "org.scala-lang" % "scala-actors" % "2.10.2"
)

libraryDependencies ++= Seq(
  "net.databinder" %% "dispatch-core" % "0.8.10"
)

libraryDependencies ++= Seq(
  "net.databinder" %% "dispatch-futures" % "0.8.10"
)

libraryDependencies ++= Seq(
  "net.databinder" %% "dispatch-nio" % "0.8.10"
)

libraryDependencies ++= Seq(
  "org.slf4j" % "slf4j-api" % "1.6.4",
  "org.slf4j" % "slf4j-simple" % "1.6.4"
)

libraryDependencies ++= Seq(
  "org.json4s" %% "json4s-core" % "3.2.10",
  "org.json4s" %% "json4s-native" % "3.2.10",
  "org.json4s" %% "json4s-jackson" % "3.2.10",
  "net.databinder" %% "unfiltered-netty" % "0.8.0" % "test",
  "net.databinder.dispatch" % "dispatch-json4s-native_2.11" % "0.11.1"
)

libraryDependencies ++= Seq(
  "io.argonaut" %% "argonaut" % "6.0.4"  
)

initialCommands := "import dispatch._"

This modified json is working for me 这个修改过的json对我有用

 val json="""{"1":{"name":"user1", "age":16}}"""

age is in quotes and taking quotes for 16. age is defined as int. 年龄用引号括起来,用引号括起来是16。

When I replicated your build.sbt, it seems there is two conflicting version of json4s related libraiers are getting loaded. 当我复制您的build.sbt时,似乎有两个相互矛盾的json4s版本相关的libraiers正在加载。 One version mentioned here for the 这里提到的一个版本

"org.json4s" %% "json4s-core" % "3.2.10",
"org.json4s" %% "json4s-native" % "3.2.10",
"org.json4s" %% "json4s-jackson" % "3.2.10",

And the other version mentioned from this line 这行提到的另一个版本

"net.databinder.dispatch" ...... "..._2.11", 

which is pulling the json4s for the scala 2.11 version. 这为scala 2.11版本拉了json4s。

Changing the netbinder version from "_2.11" to "_2.10" seems to be building fine.

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM