在Play Json中读取snake_case属性为camelCase

时间:2013-08-13 06:19:54

标签: playframework playframework-2.0

我想在Play应用程序中提取json作为案例类。 case类中的属性在camelCase中定义,json数据在snake_case中。

case class User(userId: Long, userName: String)

和json会是这样的     { “USER_NAME”: “维沙尔”, “USER_ID”:67}

是否有一种简单的方法可以指示播放json自动进行映射和提取,例如提供一些注释等。

4 个答案:

答案 0 :(得分:6)

这是一个相当古老的问题,但我没有找到任何答案,所以我去Play JSON Github存储库找到了这个:

implicit val config = JsonConfiguration(SnakeCase)

implicit val userReads: Reads[PlayUser] = Json.reads[PlayUser]

所以,现在似乎存在这样做的官方方式

https://github.com/playframework/playframework/blob/d96d42e4baa2261d0e0a9c36518f6921e247e402/documentation/manual/working/scalaGuide/main/json/code/ScalaJsonAutomatedSpec.scala#L128

答案 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

这似乎满足正好我正在寻找的东西,希望它有所帮助!