【问题标题】:JSON Parser for Scala 2.12Scala 2.12 的 JSON 解析器
【发布时间】: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


【解决方案1】:

请转至this article。它有几个可以与 Scala 一起使用的 JSON 解析框架示例。

import net.liftweb.json.JsonAST
import net.liftweb.json.JsonDSL._
import net.liftweb.json.Printer.{compact,pretty}

object LiftJsonWithCollections extends App {

    val json = List(1, 2, 3)
    println(compact(JsonAST.render(json)))

    val map = Map("fname" -> "Alvin", "lname" -> "Alexander")
    println(compact(JsonAST.render(map)))
}

该程序打印以下输出:

[1,2,3]
{"fname":"Alvin","lname":"Alexander"}

如果需要,还可以查看 this one 以从具有集合的 Scala 类创建 JSON 字符串。

【讨论】:

  • 我尝试从带有 Scala 2.12 和以下 Maven 库坐标的 Databricks 笔记本运行此代码,并在集群 net.liftweb:lift-json_2.12:3.4.3 上安装了以下 Maven 库坐标,但我不断收到语法错误.关于让它在 Databricks 中运行的步骤有什么想法吗?谢谢
猜你喜欢
  • 1970-01-01
  • 2014-05-24
  • 2013-11-23
  • 1970-01-01
  • 2021-09-28
  • 1970-01-01
  • 2017-10-12
  • 2016-06-30
  • 2017-01-24
相关资源
最近更新 更多