2016-11-09 205 views
0

我需要此JSON轉換(即我是否從RDD火花像JsonString值)轉換的Json在陣列的陣列

[ 
    { 
    "Quantita": 6, 
    "Provincia": "BARI", 
    "GENERE": "Avventura" 
    }, 

    { 
    "Quantita": 30, 
    "Provincia": "BARI", 
    "GENERE": "Storia" 
    }, 
    { 
    "Quantita": 6, 
    "Provincia": "MODUGNO", 
    "GENERE": "Avventura" 
    }, 

    { 
    "Quantita": 6, 
    "Provincia": "MODUGNO", 
    "GENERE": "Storia" 
    }, 
    { 
    "Quantita": 8, 
    "Provincia": "MODUGNO", 
    "GENERE": "Avventura" 
    }] 

在陣列中是這樣的:

[ 
    ['Bari','Avventura',6], 
    ['Bari','Storia',30], 
    ['Modugno','Avventura',6], 
    ['Modugno','Giallo',6], 
    ['Modugno','Storia',6], 
    ['Avventura','Bari',6], 
    ['Avventura','Modugno',6], 
    ['Storia','Bari',30], 
    ['Storia','Modugno',6] 
] 

我使用Play框架和我嘗試做一個案例類這樣

case class Libro_D(
    quantita: Int, 
    provincia: String, 
    genere: String 
    ) 

然後我使用的讀取方法:

implicit val recordReads: Reads[Libro_D] = (
     (JsPath \ "Quantita").read[Int] and 
     (JsPath \ "Provincia").read[String] and 
     (JsPath \ "GENERE").read[String] 
    )(Libro_D.apply _) 

而且我創建一個列表如下:

val parsedJson = Json.parse(JString_D.stripMargin) 

    implicit val f = Json.format[Libro_D] 
    println(parsedJson.validate[List[Libro_D]] match { 
     case JsSuccess(value, _) => value.map { record => s"""[${record.provincia},${record.genere},${record.quantita}]\n"""}.mkString("[", ",", "]") 
     case JsError(_) => println("") 
    }) 

所以我有一個問題。當我打印清單時,是空的。爲什麼? 有人可以幫助我嗎?我使用Scala Play框架

回答

-1

parsedJson不是List[Libro_D]。這是一個play.api.libs.json.JsArray。將您的代碼更改爲parsedJson.validate[JsArray]。在JsSuccess的情況下,打印一條適當的消息(因爲value.map將不起作用)

0

如果您只需要轉換json,請參閱JSON transformers

簡單改造可以幫助你:

val t = __.read[List[JsArray]](
    list(
    __.read[JsObject].map(o => 
     List((o \ "Provincia").get, (o \ "GENERE").get, (o \ "Quantita").get) 
    ).map(JsArray)  
) 
).map(JsArray) 

json.transform(t) 

scala> res9: play.api.libs.json.JsResult[play.api.libs.json.JsArray] = JsSuccess([["BARI","Avventura",6],["BARI","Storia",30],["MODUGNO","Avventura",6],["MODUGNO","Storia",6],["MODUGNO","Avventura",8]],)