Scala 您好,我正在尝试读取一个JSON文件,并使用一个模板进行排序,事情将按照特定的顺序进行,我可以得到一些关于如何做的提示吗?

Scala 您好,我正在尝试读取一个JSON文件,并使用一个模板进行排序,事情将按照特定的顺序进行,我可以得到一些关于如何做的提示吗?,scala,Scala,我找到了如何阅读它,但似乎找不到我需要的关于如何使用我自己的模板订购它的信息。并将其写入不同的json文件。我正在使用Scala。您的问题非常抽象,但这里有一个很好的库,用于Scala中的JSON解析和操作 通常,要将数据从一个JSON文件转换为另一个JSON文件,您需要将其解析为内存中的某些数据结构(案例类、Scala集合等),将它们转换并序列化回文件 是最低效的JSON解析器,尤其是当需要解析文件时。它的核心解析器只处理需要将整个文件读取到RAM并将其从编码字节(通常为UTF-8)转换为字符

我找到了如何阅读它,但似乎找不到我需要的关于如何使用我自己的模板订购它的信息。并将其写入不同的json文件。我正在使用Scala。

您的问题非常抽象,但这里有一个很好的库,用于Scala中的JSON解析和操作


通常,要将数据从一个JSON文件转换为另一个JSON文件,您需要将其解析为内存中的某些数据结构(案例类、Scala集合等),将它们转换并序列化回文件

是最低效的JSON解析器,尤其是当需要解析文件时。它的核心解析器只处理需要将整个文件读取到RAM并将其从编码字节(通常为UTF-8)转换为字符串的字符串,甚至它的替代Jawn解析器也将整个文件读取到字节数组,然后将其转换为字符串,然后开始解析。它的格式化程序也有很多开销:在开始将整个输出写入文件之前,将其序列化为字符串或字节缓冲区

使用集成会更好,甚至更好:两者都支持从FileInputStream读取和写入FileOutputStream

最有效的Scala解析器和序列化程序,可用于从/到文件的缓冲读/写,下面是使用它的解析转换序列化代码的示例

让我们了解JSON文件的以下内容:

{
  "name": "John",
  "devices": [
    {
      "id": 1,
      "model": "HTC One X"
    }
  ]
}
我们将把它转化为:

{
  "name": "John",
  "devices": [
    {
      "id": 1,
      "model": "HTC One X"
    },
    {
      "id": 2,
      "model": "iPhone X"
    }
  ]
}
以下是我们如何利用:


你需要更具体一点。也许包括一个最小的例子。如果你需要帮助形成你的问题,请回答这个问题,我很乐意帮助你。
libraryDependencies ++= Seq(
  "com.github.plokhotnyuk.jsoniter-scala" %% "jsoniter-scala-core" % "0.29.2" % Compile, 
  "com.github.plokhotnyuk.jsoniter-scala" %% "jsoniter-scala-macros" % "0.29.2" % Provided // required only in compile-time
)

// import required packages
import java.io._
import com.github.plokhotnyuk.jsoniter_scala.macros._
import com.github.plokhotnyuk.jsoniter_scala.core._

// define your model that mimic JSON format
case class Device(id: Int, model: String)
case class User(name: String, devices: Seq[Device])

// create codec for type that corresponds to root of JSON
implicit val codec = JsonCodecMaker.make[User](CodecMakerConfig())

// read & parse JSON from file to your data structures
val user = {
  val fis = new FileInputStream("/tmp/input.json")
  try readFromStream(fis)
  finally fis.close()
}

// transform your data
val newUser = user
  .copy(devices = user.devices :+ Device(id = 2, model = "iPhone X"))

// write your transformed data to json file
val fos = new FileOutputStream("/tmp/output.json")
try writeToStream(newUser, fos)
finally fos.close()