Я новичок в 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))
}
}
Массив [data:[]]
LinkedHashMap сформирован.
Теперь мне нужно из массива сделать один LinkedHasMap. Я пытаюсь сделать одну карту в своей функции. Это может быть одна карта или массив карт с ключом. Например:
[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]] at data.put(get_map(subNode))
Как правильно добавить мои значения на карту? Мои входные данные:
<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