Groovy: XML в JSON
У меня есть XML из записей справочника. Мне нужно получить из него массив JSON. При этом тип каждого объекта (JSON объект это или массив) необходимо предопредлить и убрать в наименовании namespace. Я попробовал несколько вариантов, но везде одна проблема - если во вложенном поле, где по логике массив, 1 элемент, то поле преобразовывается в объект.
Последнее что я пробовал это
rax = (xml данные)
def xml = new XmlSlurper().parseText(raw)
def jsonObject = []
for (node in xml.nsiKTRUs.childNodes()) {
rootNodeName = node.name()
Map nodeMap = new HashMap()
Map data = new HashMap()
Map elMap = new HashMap()
nodeMap = [:]
for (subNode in node.childNodes()[0].childNodes()){
if (subNode.name() == 'OKPD2') {
nodeMap.put('OKPD2', [:])
nodeMap.OKPD2 << (convertToMap(subNode))
}
if (subNode.name() == 'OKEIs') {
nodeMap.put('OKEIs', [])
for (el in subNode.childNodes()) {
elMap.put('OKEI', [:])
elMap.OKEI << convertToMap(el)
nodeMap.OKEIs.add(elMap)
println(nodeMap)
//elMap.clear()
}
}
println(nodeMap)
if (subNode.name() == 'NSI') {
nodeMap.put('NSI', [:])
println(nodeMap)
for (el in subNode.childNodes()) {
nodeMap.NSI.put(el.name(), [])
println(nodeMap)
}
}
else {
nodeMap.put(subNode.name(), subNode.text())
}
}
jsonObject.add(nodeMap)
}
//println(jsonObject)
json = JsonOutput.toJson(jsonObject)
Но есть одна проблема, после первого добавления мапы в мапу nodeMap почему то поле приводится к строке Тут все нормально
[code:26.20.14.000-00000144, version:2, inclusionDate:2018-08-03T15:56:29+04:00, publishDate:2019-05-24T14:51:41+04:00, name:Сервер, OKPD2:26.20.14.000Машины вычислительные электронные цифровые, поставляемые в виде систем для автоматической обработки данных, actual:false, applicationDateStart:2018-09-15T00:00:00+04:00, OKEIs:[[OKEI:[code:796, name:Штука]]]]
После повторного добавления вложенного поля if (subNode.name() == 'NSI')
[code:26.20.14.000-00000144, version:2, inclusionDate:2018-08-03T15:56:29+04:00, publishDate:2019-05-24T14:51:41+04:00, name:Сервер, OKPD2:26.20.14.000Машины вычислительные электронные цифровые, поставляемые в виде систем для автоматической обработки данных, actual:false, applicationDateStart:2018-09-15T00:00:00+04:00, OKEIs:796Штука, NSI:[classifiers:[]], characteristics:2c93be6b-0Объем оперативной памяти21truetrue12553ГигабайтAgreaterOrEqual128607c7724-4Количество процессоров21truetrue1796ШтукаAgreaterOrEqual1796d3c39-8Объем установленных накопителей21truetrue12554ТерабайтAgreaterOrEqual32]
Кому интересно исходный XML на pastebin https://pastebin.com/QGxvW7nZ
Как можно собрать из XML JSON, своей необходимой структуры?