【发布时间】:2021-05-03 17:06:57
【问题描述】:
我正在寻找一种使用 JSON 解析器重写以下代码的方法。目前使用的是scala.util.parsing.json.JSONObject,已被弃用。
val notebookInfo = Map("notebookURL" -> notebookURL,
"user" -> user,
"name" -> name,
"mounts" -> dbutils.fs.ls("/mnt").map(_.path),
"timestamp" -> System.currentTimeMillis)
val notebookInfoJson = scala.util.parsing.json.JSONObject(notebookInfo)
我已尝试使用 Circe JSON 解析器执行以下操作,但出现错误:
val notebookInfo = Json.obj("notebookURL" -> Json.fromString(notebookURL),
"user" -> Json.fromString(user),
"name" -> Json.fromString(name),
"mounts" -> Json.arr(Seq(dbutils.fs.ls("/mnt").map(Json.fromString) :_*),
"timestamp" -> Json.fromLong(System.currentTimeMillis)))
val notebookInfoJson = notebookInfo
这是我看到的错误:
error: type mismatch;
found : String => io.circe.Json
required: com.databricks.backend.daemon.dbutils.FileInfo => ?
"mounts" -> Json.arr(Seq(dbutils.fs.ls("/mnt").map(Json.fromString) :_*),
^
error: type mismatch;
found : (String, io.circe.Json)
required: io.circe.Json
"timestamp" -> Json.fromLong(System.currentTimeMillis)))
【问题讨论】:
-
你的问题不是很清楚,你说你想使用 Json 解析器库来解析下面的代码?您无法使用 Json 库解析 Scala 代码,所以我想这只是问题中的一个错误,或者我读错了。 - 也许你想要的是从一些数据中产生一个 Json 字符串?
-
@Luis Miguel Mejía Suárez 谢谢,我编辑了这篇文章。由于不推荐使用 scala.util.parsing.json.JSONObject ,因此只是尝试重新编写代码。
-
是的,我明白了,但我不知道
scala.util.parsing.json.JSONObject做了什么,所以我问你的最终目标是什么。 -
@Luis Miguel Mejía Suárez 在本例中,它从 Map 构造一个 JSONObject。
-
是的,但是您需要
JSONObject做什么? - 首先,您需要了解没有单一且通用的JSONObject类,因此您使用 circe 构造的JSONObject与使用 scala-util 构造的类型不同-parsing-json,所以如果你需要那个确切的类型,你不能使用 circe (也不是任何其他库)。现在,我怀疑您是否需要那个确切的类型,您可能需要JSONObject来做其他事情,比如将其打印为格式正确的 JSON 字符串或其他内容。没有这些细节就很难为您提供帮助。
标签: json scala databricks jsonparser