Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala:如何将带有混合标记的xml元素转换为JSON字符串?_Json_Xml_Scala - Fatal编程技术网

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

Scala:如何将带有混合标记的xml元素转换为JSON字符串?,json,xml,scala,Json,Xml,Scala,我想转换下面的XML对象 val xml = <body> <para>first</para> <para>second</para> <sometag>xyz</sometag> </body> 我在scala库下面尝试过 1。net.liftweb | lift-json | u 2.11 | 3.3.0 import net.liftweb._ import net

我想转换下面的XML对象

val xml = <body>
    <para>first</para>
    <para>second</para>
    <sometag>xyz</sometag>
</body>
我在scala库下面尝试过

1。net.liftweb | lift-json | u 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)))
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”}

2。org.json4s | json4s-xml|u 2.11 | 3.6.5

import net.liftweb._

import net.liftweb.json.Xml.XmlNode

import net.liftweb.json.Xml

import net.liftweb.json._


println("JSON STRING" + compactRender(toJson(xml)))
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"}}
(有点晚了。) 您可以为此使用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"
}}
import org.json.XML
val xml=”“”
第一
第二
xyz
"""
val jsonStr=XML.toJSONObject(xmlData).toString(indentFactor=4)
println(jsonStr)
输出:
{“机构”:{
“第款”:[
“第一”,
“第二”
],
“sometag”:“xyz”
}}

注意:JSON元素的顺序可能会有所不同。

可能是重复的,有大量不同的库用于将XML转换为JSON;他们做的都不一样,没有一个人每次都做对了。为了使转换“正确”,库必须知道两个para元素的顺序是重要的,但sometag子元素的相对顺序不是。它怎么可能知道呢?你想打印什么?@james whiteley firstsecondxyz应该打印到{“body”:{“para”:[{“inner”:“first}”,second“],“sometag”:“xyz”}顺便说一句,如果只有“para”,它实际上会解析到一个列表中标记,因此如果您没有
sometag
或在“para”中添加父项,则它可以工作。正如这里提到的,有很多方法可以解析这样的列表。。