Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
读取JSON并解析内容,然后在Scala中显示结果_Json_Scala - Fatal编程技术网

读取JSON并解析内容,然后在Scala中显示结果

读取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,座椅和

我是scala的新手。我尝试读取json并使用json4s库解析它。 已经编写了用于读取和解析示例json文件的case类和代码。 我需要迭代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)