我想在Play应用程序中提取json作为案例类。 case类中的属性在camelCase中定义,json数据在snake_case中。
case class User(userId: Long, userName: String)
和json会是这样的 { “USER_NAME”: “维沙尔”, “USER_ID”:67}
是否有一种简单的方法可以指示播放json自动进行映射和提取,例如提供一些注释等。
答案 0 :(得分:6)
这是一个相当古老的问题,但我没有找到任何答案,所以我去Play JSON Github存储库找到了这个:
implicit val config = JsonConfiguration(SnakeCase)
implicit val userReads: Reads[PlayUser] = Json.reads[PlayUser]
所以,现在似乎存在这样做的官方方式
答案 1 :(得分:1)
有关此问题的官方解决方案,请参阅@GlauberCampinho's answer,
在写这个答案的时候不存在。
Play使用Jackson。在Java中,您可以在属性上使用Jackson注释org.codehaus.jackson.annotate.JsonProperty
来手动设置名称。 value
参数的参数将用作密钥的名称。
@JsonProperty("user_name")
String userName;
我不知道这是否也适用于使用Scala的Play。基于此thread about Scala and Jackson中的注释,反序列化的语法应该是这样的:
class User @JsonCreator()( @JsonProperty("user_id") val userId:Long, @JsonProperty("user_name") val userName:String )
您可以在this question的案例类中找到另一个Jackson注释示例。
答案 2 :(得分:1)
如果您正在使用Play 2的JSON Inception,那么不会。如果您不是,那么您可以使用@JsonProperty注释。
我试图使用各种形式和配置的jerkson / jackson注释让JSON Inception工作几天没有这样的运气!
答案 3 :(得分:0)
对于Play Json 2.x:https://github.com/tototoshi/play-json-naming
这似乎满足正好我正在寻找的东西,希望它有所帮助!