2016-11-09 162 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]],)