[英]Read a JSON and parse the contents and display the result in Scala
我是scala
的新手。 我嘗試讀取 json 並使用json4s library
對其進行解析。 已經編寫了案例 class 以及用於讀取和解析示例 json 文件的代碼。 我需要迭代json
並打印每個屬性的詳細信息。
case class VehicleDetails(
name: String,
manufacturer: String,
model: String,
year: String,
color: String,
seat: Int,
variants: Seq[String],
engine: Int,
dealer: Map[String, String],
franchise: Map[String, String])
import org.json4s._
import org.json4s.jackson.JsonMethods._
import org.json4s.DefaultFormats
object CarDetails extends App {
val json = parse("""{
"vehicle_details": [
{
"CAR": {
"name": "Brezza",
"manufacturer": "Maruti",
"model": "LDI",
"year": 2019,
"color": "Blue",
"seat": 5,
"engine": 1,
"cylinder": 4,
"variants": [
"LDI",
"LDI(O)",
"VDI",
"VDI(O)",
"ZDI",
"ZDI+"
],
"dealer": {
"kerala": "Popular"
},
"franchise": {
"ekm": "popular_ekm"
}
},
"SUV": {
"name": "Scross",
"manufacturer": "Maruti",
"model": "LDI",
"year": 2020,
"color": "Blue",
"variants": [
"LDI",
"VDI",
"ZDI"
],
"dealer": {
"kerala": "Popular"
},
"franchise": {
"ekm": "popular_ekm"
}
}
}
]
}""")
implicit val formats = DefaultFormats
val definition = json.extract[VehicleDetails.Definition]
val elements = (json \\ "vehicle_details").children
這非常接近,只需要進行一些小的更改。
首先,創建一個封裝所有 JSON 數據的 class:
case class AllDetails(vehicle_details: List[Map[String, VehicleDetails]])
然后只需從 json 中extract
json
implicit val formats = DefaultFormats
val details = Extraction.extract[AllDetails](json)
對於這個特定的 JSON,所有記錄中都不存在seat
和engine
字段,因此您需要修改VehicleDetails
以設置這些Option
值:
case class VehicleDetails(
name: String,
manufacturer: String,
model: String,
year: String,
color: String,
seat: Option[Int],
variants: Seq[String],
engine: Option[Int],
dealer: Map[String, String],
franchise: Map[String, String]
)
[其他記錄中可能省略的其他值也需要是Option
值]
您可以使用標准 Scala 方法取消選擇結果。 例如
res.vehicle_details.headOption.foreach { cars =>
val typeNames = cars.keys.mkString(", ")
println(s"Car types: $typeNames")
cars.foreach { case (car, details) =>
println(s"Car type: $car")
println(s"\tName: ${details.name}")
val variants = details.variants.mkString("[", ", ", "]")
println(s"\tVariants: $variants")
}
}
要返回原始 JSON,請使用Serialization
:
import org.json4s.jackson.Serialization
val newJson = Serialization.write(res)
println(newJson)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.