我一直在看杰克逊,但似乎我必须将Map转换为JSON,然后将结果JSON转换为POJO.
有没有办法将Map直接转换为POJO?
我有一个来自库类的case,我想重写unapply方法来减少我需要传递的参数数量来进行模式匹配.我这样做:
object ws1 {
// a library class
case class MyClass(a: Int, b: String, c: String, d: Double /* and many more ones*/)
// my object I created to override unapply of class MyClass
object MyClass {
def unapply(x: Int) = Some(x)
}
val a = new MyClass(1, "2", "3", 55.0 /* and many more ones*/)
a match {
case MyClass(x /*only the first one is vital*/) => x // java.io.Serializable = …Run Code Online (Sandbox Code Playgroud) 我正在使用其POJO处理程序构建一个AWS lambda函数,但是对RequestHandler接口进行抽象会导致擦除的类型。发生这种情况时,AWS无法转换为我的lambda函数的输入类型:
java.util.LinkedHashMap cannot be cast to com.amazonaws.services.lambda.runtime.events.SNSEvent: java.lang.ClassCastException
java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.amazonaws.services.lambda.runtime.events.SNSEvent
Run Code Online (Sandbox Code Playgroud)
以下代码在上载到AWS时适用:
import com.amazonaws.services.lambda.runtime._
import com.amazonaws.services.lambda.runtime.events.SNSEvent
// Only working version
class PojoTest1 extends Handler1[SNSEvent]{
override def handleRequest(input: SNSEvent, context: Context): Unit =
println(s"message: ${input.getRecords.get(0).getSNS.getMessage}")
}
trait Handler1[Event] extends RequestHandler[Event, Unit]{
override def handleRequest(input: Event, context: Context): Unit
}
Run Code Online (Sandbox Code Playgroud)
现在,因为我正在使用Scala,所以我将抽象化具有通用特征的Java RequestHandler。以下是无效的缩小示例:
// Doesn't work
class PojoTest2 extends Handler2[SNSEvent]{
override def act(input: SNSEvent): Unit =
println(s"message: ${input.getRecords.get(0).getSNS.getMessage}")
}
trait Handler2[Event] extends RequestHandler[Event, Unit]{ …Run Code Online (Sandbox Code Playgroud) 我有以下数据结构:
val jsonStr = """
{
"data1": {
"field1": "data1",
"field2": 1.0,
"field3": true
},
"data211": {
"field1": "data211",
"field2": 4343.0,
"field3": false
},
"data344": {
"field1": "data344",
"field2": 436778.51,
"field3": true
},
"data41": {
"field1": "data41",
"field2": 14348.0,
"field3": true
}
}
"""
Run Code Online (Sandbox Code Playgroud)
我想要提取它.这是我正在做的没有任何运气:
#1.
case class Fields(field1: String, field2: Double, field3: Boolean)
json.extract[Map[String, Map[Fields, String]]]
//org.json4s.package$MappingException: Do not know how to convert JBool(true)
//into class java.lang.String
#2.
json.extract[Map[String, Map[String, Fields]]
//java.lang.InternalError: Malformed class name
#3.
json.extract[Map[String, Map[String, Any]]] …Run Code Online (Sandbox Code Playgroud) scala ×3
json ×2
aws-lambda ×1
dictionary ×1
jackson ×1
lift ×1
lift-json ×1
parsing ×1
pojo ×1