package com.wausoft.availability.parser import com.google.gson.Gson import scala.io.Source import java.io.PrintWriter import com.wausoft.availability.model._ object Program { def main(args: Array[String]): Unit = { // define paths val inPath = "C:\\Users\\Slench\\Desktop\\swissHouseData.json" val outPath = "C:\\Users\\Slench\\Desktop\\swissTuples.txt" println("Getting data") // read data from file and make a string out of it val data = Source.fromFile(inPath)("UTF-8").mkString println("Parsing data") // parse read data to a Response object val parsed = new Gson().fromJson(data, classOf[Response]) // filter and flatten from List[List[T]] to List[T] val availabilityPeriods = parsed.result.map(_.availabilityPeriod).flatten // make tuples containing only the important data val relevantData = availabilityPeriods.map(i => (i.arrivalDate, i.departureDate, i.onRequest)) // group by first element in tuple and then sort accordingly val groupedData = relevantData.groupBy(_._1).toList.sortBy(_._1) val writer = new PrintWriter(outPath) println("Writing data") for(e <- groupedData) { val common = e._1 val content = e._2.map(i => (i._2, i._3)).mkString(", ") writer.print(s"$common -> {$content}\n") } println("Finished writing") writer.close } }