lift-json 3.0.1 将 json 数组转换为逗号分隔字符串的代码片段中的编译错误



我正在尝试使用json格式的文本并将其转换为xml。我正在使用 lift-json 来解决这个问题。根据这里的 lift-json 文档(def toXml),我应该能够使用以下方法将 json 数组的元素转换为逗号分隔的字符串:

toXml(json map {
case JField("nums",JArray(ns)) => JField("nums",JString(ns.map(_.values).mkString(",")))
case x => x
})

所以我写了以下代码:

case work: ActiveMQTextMessage => 
println("work.getText: " + work.getText)
val workAsJson: JValue = parse(work.getText)
val processedArraysJson = workAsJson map {
case JField(label, JArray(ns)) => JField(label, JString(ns.map(_.values).mkString(",")))
case x => x
}
val workAsXml: scala.xml.NodeSeq = toXml(processedArraysJson)

但由于某种原因,它无法编译。

它报告两个错误:

Error:(55, 14) constructor cannot be instantiated to expected type;
found   : net.liftweb.json.JsonAST.JField
required: net.liftweb.json.JsonAST.JValue
case JField(label, JArray(ns)) => JField(label, JString(ns.map(_.values).mkString(",")))
Error:(55, 49) type mismatch;
found   : net.liftweb.json.JsonAST.JField
required: net.liftweb.json.JsonAST.JValue
case JField(label, JArray(ns)) => JField(label, JString(ns.map(_.values).mkString(",")))

注意,我正在使用的 lift-json 版本是:

"net.liftweb" % "lift-json_2.12" % "3.0.1"

使用 Scala 2.12

这里的问题是 Lift 3.0 改变了 lift-json 对map使用的一些不一致之处。JField曾经是一个JValue,但现在不再是这样,因为它在概念上没有意义。要映射字段,现在必须使用mapField。在上面的代码中将map更改为mapField应该就足够了,并且我也发布了 PR 来更新文档。

(请注意,您通常会在Lift Google群组中更快地获得答案。

相关内容

  • 没有找到相关文章

最新更新