Джексон не будет полностью преобразовывать XML-файл в JSON

#java #json #jackson #modelmapper

#java #json #джексон #modelmapper

Вопрос:

Я пытаюсь преобразовать XML-строку в JSON с помощью Jackson.

На данный момент я использую эту строку:

 String xml = "<?xml version="1.0" encoding="UTF-8"?>n"  
                " <rootNode>n"  
                "    <data>n"  
                "        <cityCode>R8</cityCode>n"  
                "        <place>n"  
                "            <code>01</code>n"  
                "        </place>n"  
                "    </data>n"  
                "    <data>n"  
                "        <cityCode>R9</cityCode>n"  
                "        <place>n"  
                "            <code>02</code>n"  
                "        </place>n"  
                "    </data>n"  
                "</rootNode>";
 

Вот код, который я использую:

 XmlMapper xmlMapper = new XmlMapper();
JsonNode node = xmlMapper.readTree(xml);
ObjectMapper jsonMapper = new ObjectMapper();
String json = jsonMapper.writeValueAsString(node)
 

Но анализатор, похоже, получает только один узел:

 {"data":{"cityCode":"R9","place":{"code":"02"}}}
 

Как я могу преобразовать все узлы в JSON?

Спасибо

Комментарии:

1. Два XML-элемента data преобразуются в json-элементы с именем «data». Кажется, у вас не может быть двух json-элементов с одинаковым именем в одном json-объекте. Второй элемент данных для этого перезаписывает первый.

2.Читать github.com/FasterXML/jackson-dataformat-xml#known-limitations.

Ответ №1:

Я заставляю его работать, используя readValue в List

 XmlMapper xmlMapper = new XmlMapper();
List list = xmlMapper.readValue(xml, List.class);
ObjectMapper jsonMapper = new ObjectMapper();
String json = jsonMapper.writeValueAsString(list);
 

Не уверен, почему ваша версия не работает, похоже, есть проблемы с readTree и повторяющимися атрибутами. Смотрите Эту статью, Укажите 5.1. Limitations