JSON4S未知错误

编程入门 行业动态 更新时间:2024-10-18 16:46:17
本文介绍了JSON4S未知错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我想让json4s提取一些东西,但我得到一个未知错误

i am trying to get json4s to extract something but i get a "unknown error"

我的代码如下:

import org.json4s._ import org.json4s.jackson.JsonMethods._ implicit val formats = org.json4s.DefaultFormats case class Person(name: String, age: Int) val json = """{"name":"joe","age":15}""" print(parse(json).extract[Person])

错误路径:

org.json4s.MappingException: unknown error at org.json4s.Extraction$.extract(Extraction.scala:50) at org.json4s.ExtractableJsonAstNode.extract(ExtractableJsonAstNode.scala:21) at Main$$anon$1.<init>(test.scala:8) at Main$.main(test.scala:1) at Main.main(test.scala) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at scala.tools.nsc.util.ScalaClassLoader$$anonfun$run$1.apply(ScalaClassLoader.scala:78) at scala.tools.nsc.util.ScalaClassLoader$class.asContext(ScalaClassLoader.scala:24) at scala.tools.nsc.util.ScalaClassLoader$URLClassLoader.asContext(ScalaClassLoader.scala:88) at scala.tools.nsc.util.ScalaClassLoader$class.run(ScalaClassLoader.scala:78) at scala.tools.nsc.util.ScalaClassLoader$URLClassLoader.run(ScalaClassLoader.scala:101) at scala.tools.nsc.ObjectRunner$.run(ObjectRunner.scala:33) at scala.tools.nsc.ObjectRunner$.runAndCatch(ObjectRunner.scala:40) at scala.tools.nsc.ScriptRunner.scala$tools$nsc$ScriptRunner$$runCompiled(ScriptRunner.scala:171) at scala.tools.nsc.ScriptRunner$$anonfun$runScript$1.apply(ScriptRunner.scala:188) at scala.tools.nsc.ScriptRunner$$anonfun$runScript$1.apply(ScriptRunner.scala:188) at scala.tools.nsc.ScriptRunner$$anonfun$withCompiledScript$1.apply$mcZ$sp(ScriptRunner.scala:157) at scala.tools.nsc.ScriptRunner$$anonfun$withCompiledScript$1.apply(ScriptRunner.scala:131) at scala.tools.nsc.ScriptRunner$$anonfun$withCompiledScript$1.apply(ScriptRunner.scala:131) at scala.tools.nsc.util.package$.waitingForThreads(package.scala:26) at scala.tools.nsc.ScriptRunner.withCompiledScript(ScriptRunner.scala:130) at scala.tools.nsc.ScriptRunner.runScript(ScriptRunner.scala:188) at scala.tools.nsc.ScriptRunner.runScriptAndCatch(ScriptRunner.scala:201) at scala.tools.nsc.MainGenericRunner.runTarget$1(MainGenericRunner.scala:58) at scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.scala:80) at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:89) at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) Caused by: java.lang.NoSuchFieldException: MODULE$ at java.lang.Class.getField(Class.java:1520) at org.json4s.Meta$$anonfun$mappingOf$1$$anonfun$8.apply(Meta.scala:208) at org.json4s.Meta$$anonfun$mappingOf$1.apply(Meta.scala:207) at org.json4s.Meta$$anonfun$mappingOf$1.apply(Meta.scala:195) at org.json4s.Meta$Memo.memoize(Meta.scala:240) at org.json4s.Meta$.mappingOf(Meta.scala:195) at org.json4s.Extraction$.mkMapping$1(Extraction.scala:207) at org.json4s.Extraction$$json4s$Extraction$$extract0(Extraction.scala:214) at org.json4s.Extraction$.extract(Extraction.scala:47) ... 34 more

我用json4s 2.9.2:3.1.0运行SCALA 2.9.2和jackson解析器2.1.1

I run SCALA 2.9.2 with json4s 2.9.2:3.1.0 with the jackson parser 2.1.1

在我去json4s之前我尝试过杰克逊直接,甚至没有提供的示例与提取工作,所以我想这里的东西,但不是一个线索从哪里开始寻找。

before i went to "json4s" i tryed jackson directly and got not even the the provided examples to work with extraction so i figure something is off here but not rly a clue where to start looking.

提前感谢帮助:)

推荐答案

实际上,放置案例类代码存在差异。考虑两个例子:

In fact there's a difference where you place your case class code. Consider two examples:

class SomeServlet { def someMethod(json: String) = parse(json).extract[Person] case class Person(name: String, age: Int) }

在这种情况下,类Person将具有类型为SomeServlet的隐式字段(类似于Java非静态内部类),因此不会对应于给定的JSON。这就是你得到例外的原因。现在看第二个例子:

In this case class Person will have an implicit field with type SomeServlet (like Java non-static inner class) and thus won't correspond to given JSON. That's why you get an exception. Now look at the second example:

class SomeServlet { def someMethod(json: String) = parse(json).extract[Person] } case class Person(name: String, age: Int)

在第二个示例类中,Person完全独立,因此没有隐式字段。所以它应该工作。至少对我有用。

In the second example class Person is completely independent and thus has no implicit field. So it should work. At least works for me.

更多推荐

JSON4S未知错误

本文发布于:2023-07-14 14:43:26,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1105081.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:错误   JSON4S

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!