json Jackson Scala 模块的小例子?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/16966743/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Small Example of Hymanson Scala Module?
提问by Greg
Can anyone point me towards a simple example of Hymanson serialization/deserialization with their Scala module for 2.10? I'm looking for reflection-based JSON not requiring field-by-field annotation or assignment and it seemed this could do that, but their documentation includes no examples.
任何人都可以指出我使用 2.10 的 Scala 模块进行 Hymanson 序列化/反序列化的简单示例吗?我正在寻找不需要逐字段注释或分配的基于反射的 JSON,这似乎可以做到,但他们的文档不包含任何示例。
If I have a case class:
如果我有一个案例类:
case class Person(name:String, age:Int)
val person = Person("Fred", 65)
So from their github readme:
所以从他们的github自述文件:
val mapper = new ObjectMapper()
mapper.registerModule(DefaultScalaModule)
OK, now what...? How to I convert p to/from JSON?
好的,现在呢……?如何将 p 转换为 JSON?
回答by cmbaxter
Give this a shot:
试一试:
val person = Person("fred", 25)
val mapper = new ObjectMapper()
mapper.registerModule(DefaultScalaModule)
val out = new StringWriter
mapper.writeValue(out, person)
val json = out.toString()
println(json)
val person2 = mapper.readValue(json, classOf[Person])
println(person2)
EDIT
编辑
Just be sure to declare the Personclass as top level as it will not work otherwise.
只要确保将Person类声明为顶级,否则它将无法工作。
回答by user48956
Here's a complete example:
这是一个完整的例子:
package com.example.samples
import org.junit.Test
import com.fasterxml.Hymanson.databind.ObjectMapper
import org.springframework.context.annotation.Bean
import java.io.File
import com.fasterxml.Hymanson.module.scala.DefaultScalaModule
import java.io.StringWriter
class HymansonTest {
@Test
@throws[Exception] def HymansonTest(): Unit = {
//case class Person(var name: String = "", var age: Int = 0)
//case class Person(@Bean var name: String, @Bean var age: Int)
case class Person( name: String, age: Int )
val person = Person("fred", 25)
val mapper = new ObjectMapper()
mapper.registerModule(DefaultScalaModule)
val out = new StringWriter
mapper.writeValue(out, person)
val json = out.toString()
println(json)
val person2 = mapper.readValue(json, classOf[Person])
println(person2)
}
}
However, this fails at mapper.readValue.
但是,这在 mapper.readValue 处失败。
Here's my config:
这是我的配置:
<!-- Hymanson libraries for JSON marshalling and unmarshalling -->
<dependency>
<groupId>com.fasterxml.Hymanson.core</groupId>
<artifactId>Hymanson-databind</artifactId>
<version>2.2.3</version>
</dependency>
<!-- Hymanson module for scala object marshalling and unmarshalling -->
<dependency>
<groupId>com.fasterxml.Hymanson.module</groupId>
<artifactId>Hymanson-module-scala_2.10</artifactId>
<version>2.2.2</version>
</dependency>
<!-- Scala Compiler -->
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-compiler</artifactId>
<version>2.10.2</version>
</dependency>
Any ideas why this fails? I can't see a difference with the working example.
任何想法为什么会失败?我看不出与工作示例有什么不同。
回答by Keshav Lodhi
I have created a generic function to convert JSON String to Case Class/Objectand Case Class/Object to JSON String.
我创建了一个通用函数来转换JSON String to Case Class/Object和Case Class/Object to JSON String。
SBT Dependencies required in build.sbtfile:
build.sbt文件中所需的 SBT 依赖项:
name := "Hymanson-example"
scalaVersion := "2.12.11"
libraryDependencies += "com.fasterxml.Hymanson.module" %% "Hymanson-module-scala" % "2.10.1"
libraryDependencies += "com.fasterxml.Hymanson.core" % "Hymanson-databind" % "2.10.1"
JSON String to Case Class/Object
JSON 字符串到案例类/对象
def fromJson[T](json: String)(implicit m: Manifest[T]): Option[T] = {
Try {
lazy val mapper = new ObjectMapper() with ScalaObjectMapper
mapper.registerModule(DefaultScalaModule)
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
mapper.readValue[T](json)
} match {
case Success(x) => Some(x)
case Failure(err) => {
logger.error("@@@@Got " + err.getMessage() + " while JSON to Object:--> " + json)
None
}
}
}
Case Class/Object to JSON String
案例类/对象到 JSON 字符串
def toJson[T](obj: T)(implicit m: Manifest[T]): Option[String] = {
Try {
lazy val mapper = new ObjectMapper() with ScalaObjectMapper
mapper.registerModule(DefaultScalaModule)
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
mapper.writeValueAsString(obj)
} match {
case Success(x) => Some(x)
case Failure (err) => {
logger.error("@@@@Got " + err.getMessage() + " while converting object to JSON:--> " + obj)
None
}
}
}

