Scala:如何将带有混合标签的xml Elem转换为JSON字符串?

时间:2019-03-19 03:41:09

标签: json xml scala

我想在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"}}

1 个答案:

答案 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元素的顺序可能有所不同。