2013-07-29 20 views
1

我已經得到形式的輸入數據飼料:如何使用play framework 2的json路徑來解析從xml轉換得不好的json?

{ attributes: [ 
{ name:"first", values=["1st"]}, 
{ name:"second", values=["2a", "2b"]} 
]} 

我想解析爲一個case類形式是:

case class TheThing(first:String, second:List[String]) 

所有的JSON路徑的例子讀取操作我見過只涉及從一個節點到一個屬性的直接映射,我如何處理有多個節點的操作,以及在某些情況下從列表轉換爲單數的操作?

回答

0

所以,我想出瞭解決的辦法是沒有良好的性能密集型代碼,但它提出了一個清晰的接口映射。

object ThingReads { 
    def reads(source:JsValue) = { 
    val names:Seq[String] = (source \ "attributes" \\ "name").map(_.as[String]) 
    val values:Seq[JsValue] = source \ "attributes" \\ "values" 
    val read = reads[TheThing] = (
     (__ \ "first")(0).as[String] and 
     (__ \ "second").as[List[String]] 
    )(TheThing.apply _) 
    JsObject(names.zip(values)).as[TheThing](read) 
    } 
} 

主要底片是,你需要遍歷JSON樹二乘二建「更好的形式」 JSON,然後再當你提取您的值。

此外,如果你的鍵值對集合(在這種情況下屬性)有很多它不相關的數據的,你付出的價格轉化與要提取的位一起的數據。

我要去,因爲它解決了這個問題,接受這個答案,但我會繼續回來,看看是否有人能提供卓越的解決方案(我相信有一個在那裏,我很想學習它)