2014-11-21 46 views
9

我目前正試圖使用​​json4s(scala)從json數組中提取信息。如何解析和使用json4s從json數組中提取信息

的示例數據如下:

val json = """ 
    [ 
    {"name": "Foo", "emails": ["[email protected]", "[email protected]"]}, 
    {"name": "Bar", "emails": ["[email protected]", "[email protected]"]} 
    ] 
""" 

我的代碼如下:

case class User(name: String, emails: List[String]) 
case class UserList(users: List[User]) { 
    override def toString(): String = { 
    this.users.foldLeft("")((a, b) => a + b.toString) 
    } 
} 

val obj = parse(json).extract[UserList] 
printf("type: %s\n", obj.getClass) 
printf("users: %s\n", obj.users.toString) 

的輸出結果是:

type: class UserList 
users: List() 

看來,數據未正確檢索。我的代碼有問題嗎?

更新: 它根據@Kulu Limpa的建議工作。

回答

18

你的代碼是正確的,只不過你的JSON只是一個數組,因此是List[User]。有兩種方法來解決這個問題,有一個稍微不同的結果:

解決方案1 ​​:修正JSON來

{"users": 
    [ 
    {"name": "Foo", "emails": ["[email protected]", "[email protected]"]}, 
    {"name": "Bar", "emails": ["[email protected]", "[email protected]"]} 
    ] 
} 

溶液2:提取物的類型參數更改爲

val obj = parse(json).extract[List[User]] 
+2

你先生是個紳士。謝謝! – 2015-04-04 13:37:14