2014-02-11 4 views
4

json4s에서 쉽게 필드 이름의 이름을 바꿉니 까? 그들의 설명서에서 다음 스 니펫을 시도했지만 필드의 이름을 id으로 바꾸는 것 같지 않습니다.Json4s로 직렬화하는 동안 필드의 이름을 바꾸려면 어떻게해야합니까?

case class Person(serial: Int, firstName: String) 

val rename = FieldSerializer[Person](renameTo("serial", "id")) 

implicit val format = DefaultFormats + rename 

write(Person(1, "Guest")) //returns {"serial":1,"firstName":"Guest"} 

잭슨 라이브러리를 사용하면 주석을 선언하는 것이 매우 쉽습니다. 하지만 순수한 스칼라 라이브러리/솔루션을 찾고 있습니다. 필드 이름 바꾸기가 쉬운 스칼라에서 객체 대 json 직렬화를위한 더 나은 라이브러리 또는 방법이 있습니까?

답변

5

코드는 id 인 정확한 JSON을 필드로 반환합니다. 다음은 콘솔에서 평가할 수있는 약간 더 완전한 예제입니다.

import org.json4s._ 
import org.json4s.FieldSerializer._ 
import org.json4s.jackson.Serialization.write 

case class Person(serial: Int, firstName: String) 
val rename = FieldSerializer[Person](renameTo("serial", "id")) 
implicit val format: Formats = DefaultFormats + rename 
write(Person(1, "Guest")) // actually returns {"id":1,"firstName":"Guest"} 
+3

여러 개의 이름을 결합하려면 'orElse'를 사용하십시오. 'ren renameTo ("firstName", "first_name")); 암시 적 val 형식 : 형식 = DefaultFormats + 이름 변경; write (Person (1, "Guest")) // returns ""id ": 1"first_name ":"Guest "} ' – mmullis