2014-11-21 18 views
9

Tôi hiện đang cố gắng trích xuất thông tin từ một mảng json bằng cách sử dụng json4s (scala).Cách phân tích và trích xuất thông tin từ mảng json bằng cách sử dụng json4s

Một dữ liệu ví dụ như sau:

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

Và mã của tôi là như sau:

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) 

Sản lượng hóa ra là:

type: class UserList 
users: List() 

Dường như dữ liệu không được truy xuất một cách chính xác. Có vấn đề gì với mã của tôi không?

CẬP NHẬT: Nó hoạt động theo đề xuất của @Kulu Limpa.

Trả lời

18

Mã của bạn là chính xác ngoại trừ JSON của bạn chỉ đơn giản là một mảng, do đó là List[User]. Có hai cách để sửa lỗi này, với một kết quả hơi khác nhau:

Giải pháp 1: Fix json của bạn để

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

Solution2: Thay đổi các tham số loại chiết xuất để

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

Bạn là một quý ông. Cảm ơn! –

Các vấn đề liên quan