gpt4 book ai didi

xml - 在 Groovy 中将 XML 转换为 JSON

转载 作者:数据小太阳 更新时间:2023-10-29 01:43:00 27 4
gpt4 key购买 nike

我希望使用 groovy 将 xml 转换为 JSON。我知道转换的细节取决于我的喜好,但是有人可以推荐我应该使用哪些库和方法,并向我提供一些关于为什么/如何使用它们的信息吗?我正在使用 groovy,因为有人告诉我它是一个非常有效的解析器,所以我正在寻找可以利用它的库

谢谢!

最佳答案

您可以使用基本的 Groovy 完成这一切:

// Given an XML string
def xml = '''<root>
| <node>Tim</node>
| <node>Tom</node>
|</root>'''.stripMargin()

// Parse it
def parsed = new XmlParser().parseText( xml )

// Convert it to a Map containing a List of Maps
def jsonObject = [ root: parsed.node.collect {
[ node: it.text() ]
} ]

// And dump it as Json
def json = new groovy.json.JsonBuilder( jsonObject )

// Check it's what we expected
assert json.toString() == '{"root":[{"node":"Tim"},{"node":"Tom"}]}'

但是,您确实需要考虑某些事情...

  • 你打算如何表示属性?
  • 您的 XML 是否包含 <node>text<another>woo</another>text</node>样式标记?如果是这样,您将如何处理?
  • CDATA?注释?等等?

这不是两者之间平滑的 1:1 映射......但是对于给定的特定格式的 XML,可能可以提出给定的特定格式的 Json。

更新:

要从文档中获取名称(见评论),您可以:

def jsonObject = [ (parsed.name()): parsed.collect {
[ (it.name()): it.text() ]
} ]

更新2

您可以通过以下方式添加对更大深度的支持:

// Given an XML string
def xml = '''<root>
| <node>Tim</node>
| <node>Tom</node>
| <node>
| <anotherNode>another</anotherNode>
| </node>
|</root>'''.stripMargin()

// Parse it
def parsed = new XmlParser().parseText( xml )

// Deal with each node:
def handle
handle = { node ->
if( node instanceof String ) {
node
}
else {
[ (node.name()): node.collect( handle ) ]
}
}
// Convert it to a Map containing a List of Maps
def jsonObject = [ (parsed.name()): parsed.collect { node ->
[ (node.name()): node.collect( handle ) ]
} ]

// And dump it as Json
def json = new groovy.json.JsonBuilder( jsonObject )

// Check it's what we expected
assert json.toString() == '{"root":[{"node":["Tim"]},{"node":["Tom"]},{"node":[{"anotherNode":["another"]}]}]}'

同样,所有之前的警告仍然适用(但此时应该听得更响亮一点);-)

关于xml - 在 Groovy 中将 XML 转换为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18830248/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com