2016-02-11 7 views
0

У меня такой json.как разобрать вложенный json массив в scala

certificates: [{type: "abc",file: {name: "xyz",path:"/usr/local",extension: "csv"}} , {type: "xyz",file: {name: "xyz",path: "/usr/local",extension: "csv"}} , {type: "nmo",file: {name: "xyz",path: "/usr/local",extension: "csv"}}] 

Это решение не работает в моем случае.

var list = (jsonValue \ "certificates").as[List[Map[String,String]]] 

Может кто-нибудь предложить, как разбирать это?

+0

Какая библиотека JSON вы используете? –

+0

Я использую библиотеку игр json. @ Юваль Линчаков – Sadaf

ответ

1

с Play JSON:

case class CertFile(name: String, path: String, extension: String) 

case class Certificate(certType: String, certFile: CertFile) 


implicit val certFile: Reads[CertFile] = (
    (JsPath \ "name").read[String] and 
     (JsPath \ "path").read[String] and 
     (JsPath \ "extension").read[String] 
    ) (CertFile.apply _) 

    implicit val cert: Reads[Certificate] = (
    (JsPath \ "type").read[String] and 
     (JsPath \ "file").read[CertFile] 
    ) (Certificate.apply _) 

и вы можете использовать этот способ:

val json = 
    """{ "certificates": [{"type": "abc","file": {"name": "xyz","path":"/usr/local","extension": "csv"}} , {"type": "xyz","file": {"name": "xyz","path": "/usr/local","extension": "csv"}} , {"type": "nmo","file": {"name": "xyz","path": "/usr/local","extension": "csv"}}] }""" 

    val jsonValue = Json.parse(json) 

    val list = (jsonValue \ "certificates").as[List[Certificate]]