读取JSON并解析内容,然后在Scala中显示结果
我是scala的新手。我尝试读取json并使用json4s库解析它。 已经编写了用于读取和解析示例json文件的case类和代码。 我需要迭代json并打印每个属性的详细信息 案例类 下面给出了我尝试的json数据和代码。读取JSON并解析内容,然后在Scala中显示结果,json,scala,Json,Scala,我是scala的新手。我尝试读取json并使用json4s库解析它。 已经编写了用于读取和解析示例json文件的case类和代码。 我需要迭代json并打印每个属性的详细信息 案例类 下面给出了我尝试的json数据和代码。 这非常接近,只需要一些小的改变 首先,创建一个封装所有JSON数据的类: case class AllDetails(vehicle_details: List[Map[String, VehicleDetails]]) 然后从json中提取该类 使用此特定JSON,座椅和
这非常接近,只需要一些小的改变 首先,创建一个封装所有JSON数据的类:
case class AllDetails(vehicle_details: List[Map[String, VehicleDetails]])
然后从json中提取该类
使用此特定JSON,座椅和发动机字段不会出现在所有记录中,因此您需要修改VehicleDetails以生成以下选项值:
[其他记录中可能忽略的其他值也需要是选项值]
可以使用标准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,请使用序列化:
你试过用circe来代替吗?我个人使用过它,发现它非常有帮助和直观。对于大多数任务来说,这些代码已经足够了。如果您可以更改json,那么使用Gson库解析json就会容易得多。您只需在车内添加一个标记名类型,您就可以得到该车的类型,然后所有结构都将相同。注意:Json4s是!谢谢你,蒂姆。我已经根据反馈做出了更改。工作正常。因此结果存储在val details=Extraction.extract[AllDetails]json中。我还需要打印json的详细信息。我们可以通过迭代“详细信息”来实现这一点。我添加了一些代码来演示如何打印res的内容并将其转换回JSON字符串。如果这个答案有帮助,请接受它,以便其他人可以看到它是一个有效的答案。
case class AllDetails(vehicle_details: List[Map[String, VehicleDetails]])
implicit val formats = DefaultFormats
val details = Extraction.extract[AllDetails](json)
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]
)
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")
}
}
import org.json4s.jackson.Serialization
val newJson = Serialization.write(res)
println(newJson)