2016-11-09 2 views
0

мне нужно преобразовать этот JSON (что я беру от РДД искры, как значение 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] 
] 

I использовать рамки игры, и я стараюсь, чтобы сделать случай класса как этот

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]],) 
Смежные вопросы