2014-01-29 8 views
2

내가에만이에 다음 JSON공통 경로 접두사는 JSON은

{ 
    "field": "feed", 
    "value": { 
    "item": "post", 
    "verb": "add", 
    "post_id": 1234568567515, 
    "sender_id": 10200718414514 
    } 
} 

에서 "값을"읽고 싶은 읽습니다 :

case class Value (
    item: String, 
    verb: String, 
    itemId: Long, 
    senderId: Long 
) 

(가) [가치]를 읽어

implicit val valueReads: Reads[Value] = (
    (__ \ "item").read[String] and 
    (__ \ "verb").read[String] and 
    (__ \ "post_id").read[Long] and 
    (__ \ "sender_id").read[Long] 
) (Value) 

읽기의 모든 경로에 공통 부모 노드 "값"을 t까지 반복하지 않고 어떻게 지정할 수 있습니까? 그는 (__ \ "value"\ "item"), (__ \ "value"\ "verb") 등과 같이 배치합니까?

답변

1

이 코드는 작동하는 것 같다 :

implicit val valuereads = (__ \ "value").read { 
    ((__ \ "item").read[String] and 
    (__ \ "verb").read[String] and 
    (__ \ "post_id").read[Long] and 
    (__ \ "sender_id").read[Long] 
    )(Value.apply _) 
} 
0

찾고있는 것이 맞는지 모르지만 수동으로 Reads 개체를 건너 뛰려면 매크로를 사용할 수 있습니다. 하지만 그 경우에는 부모 케이스 클래스가 있어야하는데,이 클래스는 fieldvalue의 두 필드가 있습니다.

case class Value (
    item: String, 
    verb: String, 
    itemId: Long, 
    senderId: Long 
) 

case class MyClass(field: String, value: Value) 


implicit val myClassReads = Json.reads[MyClass] 
implicit val valueReads = Json.reads[Value] 

그래서 마지막에 당신이 MyClass 객체에서 value를 얻을 수 있습니다 :

그래서 같은 것이 있습니다.

+0

그래, 쉽게했을 것이다, 그러나 요점은 내가이 값은 전체 JSON을 구문 분석의 결과 싶다 "필드"에 관심이 아니에요이다. 내 상황은 [가치] (http://stackoverflow.com/questions/18122175/scala-play-json-reads)와 유사합니다. 그 이유는 나에게 '가치'키가 방해가되고 어떤 것도 전달하지 않는다는 것입니다. 유용한 정보, 그 질문에서 "사업"열쇠처럼. – Yar