我想在XML对象下面进行转换,
val xml = <body>
<para>first</para>
<para>second</para>
<sometag>xyz</sometag>
</body>
到JSON
{"body":{"para":["first","second"],"sometag":"xyz"}}
我在scala库下面尝试过
1。 net.liftweb | lift-json_2.11 | 3.3.0
import net.liftweb._
import net.liftweb.json.Xml.XmlNode
import net.liftweb.json.Xml
import net.liftweb.json._
println("JSON STRING" + compactRender(toJson(xml)))
输出:{“ body”:{“ para”:“ first”,“ para”:“ second”,“ sometag”:“ xyz”}}
2。 org.json4s | json4s-xml_2.11 | 3.6.5
import org.json4s.Xml.{ toJson, toXml }
import org.json4s._
import org.json4s.JsonDSL._
import org.json4s.native.JsonMethods.{ render, pretty, compact }
println("JSON String:" + compact(render(toJSON(xml))))
输出:{“ body”:{“ para”:“ first”,“ para”:“ second”,“ sometag”:“ xyz”}}
在两种情况下,我都看到重复的键(请注意,para被两次看到),这在JSON中是无效的。相反,我的期望是,如果在XML文档中看到重复的XML标记,则转换器必须将这些值放置在数组中,如下所示
{"body":{"para":["first","second"],"sometag":"xyz"}}
答案 0 :(得分:0)
(有点晚了。) 您可以为此使用 org.json Java库。
import org.json.XML
val xml = """<body>
<para>first</para>
<para>second</para>
<sometag>xyz</sometag>
</body>"""
val jsonStr = XML.toJSONObject(xmlData).toString( indentFactor=4 )
println(jsonStr)
Output:
{"body": {
"para": [
"first",
"second"
],
"sometag": "xyz"
}}
注意:JSON元素的顺序可能有所不同。