2013-08-13 9 views
8

Voglio estrarre JSON come un case class all'interno dell'applicazione Play. Gli attributi in case class sono definiti in camelCase e i dati json arrivano in snake_case.Lettura degli attributi snake_case come camelCase in Play Json

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

e JSON sarebbe stato così { "user_name": "Vishal", "user_id": 67}

C'è un modo semplice per istruire il gioco JSON per fare automaticamente la mappatura e l'estratto, come fornire alcune annotazioni, ecc.

risposta

1

Questo probabilmente non funzionerà subito, quindi forse dovresti prendere in considerazione altre soluzioni come cercare qualche libreria aggiuntiva che gestisca questo.

La riproduzione utilizza Jackson. In Java, è possibile utilizzare l'annotazione Jackson org.codehaus.jackson.annotate.JsonProperty sulle proprietà per impostare manualmente i nomi. L'argomento per il parametro value verrà utilizzato come nome della chiave.

@JsonProperty("user_name") 
String userName; 

Non so se questo funziona anche in Riproduzione utilizzando Scala. Sulla base delle osservazioni in questo thread about Scala and Jackson la sintassi per deserialisation dovrebbe essere qualcosa di simile:

class User @JsonCreator()(@JsonProperty("user_id") val userId:Long, @JsonProperty("user_name") val userName:String) 

È possibile trovare un altro esempio di Jackson annotazioni in una classe caso in this question.

1

Se si utilizza JSON Inception di Play 2, quindi No. Se non lo si è, è possibile utilizzare solo le annotazioni @JsonProperty.

Stavo cercando di farlo funzionare con JSON Inception per alcuni giorni utilizzando varie forme e configurazioni di annotazioni jerkson/jackson senza tanta fortuna!

1

Questa è una domanda abbastanza vecchio, ma non ho trovato alcuna risposta per esso, così sono andato a Play JSON Github repository e abbiamo trovato questo:

implicit val config = JsonConfiguration(SnakeCase) 

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

Così, ora sembra che esiste un funzionario modo di fare questo

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

+1

questo è veramente utile, ma è disponibile solo nella prossima 2.6 rilascio. [Previsto aprile-maggio 2017] (https://docs.google.com/document/d/11sVi1-REAIDFVHvwBrfRt1uXkBzROHQYgmcZNGJtDnA/edit). –

Problemi correlati