Java XML в JSON с использованием XMLSerializer, делающим корневой элемент массивом - PullRequest
0 голосов
/ 02 ноября 2018

Учитывая, что у меня есть этот XML:

<?xml version="1.0" encoding="UTF-8"?>
<Root>
    <op>update</op>
    <path>someString</path>
    <value>12345</value>
</Root>

и я хочу этот вывод в JSON:

[{ "op":"update", "path":"someString", "value":"12345" }]

Я попробовал следующий код:

package jsonconvertor;
import net.sf.json.JSON;
import net.sf.json.xml.XMLSerializer;

public class JSONConvertor {

    public static void main(String[] args) {

        String input = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><Root><op>update</op><path>someString</path><value>12345</value></Root>";
        String output = "";

        XMLSerializer xml = new XMLSerializer();
        JSON jObj = xml.read( input );
        output = jObj.toString();

        System.out.println("My JSON:\n" + output);
    }
}

Когда я запускаю этот код, я получаю следующий ответ:

{"op":"update","path":"someString","value":"12345"}

Однако вы заметите, что ведущий '[' и закрывающий ']' отсутствуют.

Когда я пытаюсь изменить строку ввода XML в коде следующим образом:

String input = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><Root class=\"object\"><op>update</op><path>someString</path><value>12345</value></Root>";

, что имеет смысл, поскольку itRoot был объектом для начала, поэтому я попытался изменить строку «input» на «array»:

String input = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><Root class=\"array\"><op>update</op><path>someString</path><value>12345</value></Root>";

однако тогда я получаю следующее:

["update","someString","12345"]

Что мне не хватает? Мне нужен вывод, который я получаю, когда class = "object", но я хочу, чтобы он был заключен в квадратные скобки. Я хочу, чтобы результат выглядел как пример в верхней части поста.

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Попробуйте с этой строкой ввода это должно работать:

String input = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><Root class=\"array\"><SubRoot class=\"object\"><op>update</op><path>someString</path><value>12345</value></SubRoot></Root>";
0 голосов
/ 02 ноября 2018

В данном XML у вас есть только 1 ROOT элемент, так что это один JSONObject, а не JSONArray. Итак, если вы хотите JSONArray в качестве вывода, вы должны предоставить XML Array в качестве ввода для метода xml.read( input ).

Если ваш вход выглядит как ниже, вы получите желаемый результат.

<?xml version="1.0" encoding="UTF-8"?>
<Root>
    <SubRoot>
         <op>update</op>
         <path>someString</path>
         <value>12345</value>
    <SubRoot>
</Root> 

Выход:

[{"op":"update","path":"someString","value":"12345"}]
...