gpt4 book ai didi

java - Groovy:创建对象以添加到 LinkedHashMap 中

转载 作者:行者123 更新时间:2023-12-01 16:30:13 30 4
gpt4 key购买 nike

我是 Groovy 和 Java 新手。我有从某个对象返回 LinkedHashMap 的函数。它有效:

def get_map(Node) {
nodeRootName = Node.name()
if (Node.childNodes().size() == 0) {
return [(nodeRootName): (Node.text())]
} else {
subMap = [(nodeRootName):[]]
for (subNode in Node.childNodes()) {
if (subNode.name() != "cryptoSigns") {
subMap.(subMap.keySet()[0]).add(get_map(subNode))
}
}
return subMap
}
}

在代码中调用此函数:

    nodeMap = [(rootNodeName): [data:[]]] 
for (subNode in node.childNodes()[0].childNodes()) {
nodeMap.position.data.add(get_map(subNode))
}
}

LinkedHashMap的数组[data:[]]已形成。

现在,我需要从数组中创建一个 LinkedHasMap。我尝试在我的函数中制作一张 map 。它可以是一张 map 或带有键的 map 数组。例如:

[data:[
key1: value,
key2:[
[key: value],
[key: [
[key: value],
[key: value]
]
]
]]

我尝试:

def get_map(Node) {
nodeRootName = Node.name()
if (Node.childNodes().size() == 0) {
Map map = new HashMap()
map.put((nodeRootName), (Node.text()))
return map
} else {
Map subMap = new HashMap()
for (subNode in Node.childNodes()) {
subMap.put((nodeRootName), (get_map(subNode)))
}
return subMap
}
}

调用函数:

 Map nodeMap = new HashMap()
Map data = new HashMap()
for (subNode in node.childNodes()[0].childNodes()) {
data.put(get_map(subNode))
nodeMap.put((rootNodeName): (data))
}
jsonObject.nsiKTRUs.add(nodeMap)

但是我有错误:groovy.lang.MissingMethodException:没有方法签名:java.util.HashMap.put()适用于参数类型:(HashMap)值:[[code:01.11.11.111-00001]] data.put(get_map(subNode))

如何正确地将我的值添加到 map 中?我的输入数据:

<xml>
<data>
<key>value</key>
<key2>
<key21>value</key>
<key22>value</key>
<key23>
<key231>value</key>
</key>
</key2>
</data>
<xml>

自定义嵌入。

需要输出

[data:[
key: value,
key2:[
key21: value,
key22: value,
key23:[
key231: value
]
]
]
]

并且输出数据需要添加到另一个LinkedHashMap

最佳答案

我会把它写成这样:

import groovy.util.*
import groovy.json.*


def text = '''<xml>
<data>
<key>value1</key>
<key2>
<key21>value21</key21>
<key22>value22</key22>
<key23>
<key231>value</key231>
</key23>
</key2>
</data>
</xml>'''

def xml = new XmlParser().parseText( text )

def handle
handle = { node ->
if( node in String )
node
else{
def val = node.collect handle
[ (node.name()):1 == val.size() ? val.first() : val.collectEntries{ it } ]
}
}

def map = xml.collect handle

// this line is needed for pretty print only
JsonOutput.prettyPrint JsonOutput.toJson( map )

输出:

[
{
"data": {
"key": "value1",
"key2": {
"key21": "value21",
"key22": "value22",
"key23": {
"key231": "value"
}
}
}
}
]

关于java - Groovy:创建对象以添加到 LinkedHashMap 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62059512/

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