json - Scala:如何将带有混合标签的 xml Elem 转换为 JSON 字符串?
问题描述
我想转换下面的 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 | 提升-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"}}
解决方案
(有点晚了。)您可以为此使用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 元素的顺序可能会有所不同。
推荐阅读
- amazon-web-services - hadoop 混合集群的延迟
- reactjs - 未找到 iframe 的公共文件夹中的 react-create-app prod html
- node.js - 如何使用node js连接hive服务器
- delphi - 在delphi中更改.dpr文件中的文件路径
- amazon-web-services - AWS API Gateway 中 API 的 JMeter 负载测试
- php - 我不能删除唯一索引
- itext - IText 和 Headless chrome 有什么区别
- php - Artisan shell 执行时间过长。怎么修?
- php - 使用 Timber 显示子类别
- javascript - 如何使用新 div 附加 div 并将 var 放入该新 div