2017-03-29 17 views
3

我想要使用json格式的文本并将其转换为xml。对此,我正在使用lift-json。根据升降JSON文件heredef toXml),我应该能够使用以JSON数组的元素转换为逗号分隔字符串:由lift-json 3.0.1将代码片段中的编译错误转换成逗号分隔字符串的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(","))) 

通知,升JSON的版本,我使用的是:

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

使用Scala 2.12

回答

1

这里的问题是,提升3.0改变了lift-json使用map时的一些不一致之处。 JField曾经是JValue,但不再是这种情况,因为它没有概念意义。要映射字段,现在必须使用mapField。在上面的代码中将map更改为mapField应该足够了,我也有issued a PR to update the documentation

(请注意,您通常会得到更快the Lift Google group答案。)

+0

非常感谢安东尼奥,这工作,我会保持你的笔记记下一倍。 – has981

+0

没问题!抱歉花了这么长时间...我几周前发现了这个问题,但忘记发布回应:( –

相关问题