2017-08-23 9 views
0

タイトルとして、Json4sを使用して、生成されたjsonのフィールドの名前をケースクラスから変更しようとしています。あなたがjson4sのドキュメントで見つけることができるか、ここHow can I rename a field during serialization with Json4s?が動作するJson4sでネストされたフィールドの名前を変更する方法

case class User(name: String, lastName: String) 

以下の例:

私はのような単純なケースクラスのフィールドの名前を変更しようと

しかし、ドキュメンテーション、ネストされたオブジェクトを実行する方法を言及していないが、この例ではdeviceIdからdidに例えばのように名前を変更します。

FieldSerializer.renameFrom("deviceId", "did") 

または

case class User(name: String, lastName: String, details: UserDetails) 
case class UserDetails(deviceId: String) 

私はのようなものを使用してみました

FieldSerializer.renameFrom("details.deviceId", "details.did") 

または

parse(message) transformField { 
    case ("deviceId", value) => ("did", value) 
} 

または

parse(message) transformField { 
    case ("details.deviceId", value) => ("details.did", value) 
} 

そしてそれらのどれも働いていないので、私の質問です:これはscala4sに可能名前を変更するネストされていますか?はいの場合、たとえばdeviceIdの名前をdidに変更するにはどうすればよいですか?ネストされたオブジェクトの場合

答えて

0

、あなたは次のように、このネストされたタイプをバインドするFieldSerializerを作成することができます。

import org.json4s._ 
    import org.json4s.FieldSerializer._ 
    import org.json4s.jackson.Serialization.write 
    val rename = FieldSerializer[UserDetails](renameTo("deviceId", "did")) // bind UserDetails to FieldSerializer 
    implicit val format: Formats = DefaultFormats + rename 
    println(write(u)) 
    > {"name":"name","lastName":"lastName","details":{"did":"deviceId"}} 
関連する問題