【问题标题】:Json to Scala case class object - handling special characters in field namesJson 到 Scala 案例类对象 - 处理字段名称中的特殊字符
【发布时间】:2016-07-15 07:51:09
【问题描述】:

Json 示例:

var testString = {"eventType":"REQUEST","event-id":"6e904afa-62e8-40fb-8c6a-66a2ba21a3e1"}

Scala 案例类:

case class EventHeader(eventType:String,event-id:String)

反序列化代码:

var header = new Gson().fromJson(testString,classOf[EventHeader])

导致以下错误(由于“event-id”字段名称中的特殊字符):

:1: 错误: ':' 预期但发现标识符。 案例类EventHeader(eventType:String,event-id:String)

在 Java 中,我们可以在“event-id”字段上添加注释并将其命名为“eventId”或“id”。

Scala 中是否有类似的方法?

【问题讨论】:

    标签: scala gson


    【解决方案1】:
    scala> case class EventHeader(eventType:String,`event-id`:String)
    defined class EventHeader
    
    scala> EventHeader("some event", "eventid")
    res1: EventHeader = EventHeader(some event,eventid)
    

    注意 case 类声明中 event-id 周围的引号

    【讨论】:

      【解决方案2】:
      import com.fasterxml.jackson.annotation._
      import com.fasterxml.jackson.databind.ObjectMapper
      import com.fasterxml.jackson.module.scala.DefaultScalaModule
      
      case class EventHeader(@JsonProperty("event-id") eventId: String,@JsonProperty("eventType") eventType:String)
      
      val mapper = new ObjectMapper                    
      mapper.registerModule(DefaultScalaModule)         
      val obj = mapper.readValue("""{"eventType":"REQUEST","event-id":"6e904afa-62e8-40fb-8c6a-66a2ba21a3e1"}""", classOf[EventHeader])
      

      【讨论】:

      • 这也可以,但我正在尝试使用“Gson”的解决方案。
      【解决方案3】:

      使用 Gson

       import com.google.gson.Gson
      
       case class Request(command_type: String, sub_commands: 
       java.util.ArrayList[Command])
      
       new Gson().toJson(new Request("Command", subCommands))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-15
        相关资源
        最近更新 更多