Преобразовать XML в JSON Массив, если доступен только один объект, используя Java - PullRequest
1 голос
/ 20 апреля 2020

При преобразовании XML в JSON с использованием кода ниже Java (с использованием API. JSON API) я не получаю массив JSON, если доступен только один объект.

Примечание. Если доступно несколько объектов, я получаю массив, как и ожидалось.

Java Код:

import org.json.JSONObject;
import org.json.XML;

public class Convert {

public static void main(String[] args) {

    String xmlString = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
        "<School >" +
        "<Class>II-B</Class>" +
        "</School>";

    try {
        JSONObject jsonObj = XML.toJSONObject(xmlString);

        String json = jsonObj.toString(4);

        System.out.println(json);

    } catch (Exception e) {
        // TODO: handle exception
    }

}

}

Образец XML:

<School>
<Class>II-B</Class>
</School>

Ответ JSON:

{"School": { "Class": "II-B" }}

Вместо Объект, мне нужен массив, как показано ниже -

Ожидается JSON:

{ "School": {"Class": ["II-B"] }}

Есть ли способ добиться этого?

Ответы [ 2 ]

1 голос
/ 20 апреля 2020

Нет, это не так, потому что конвертер не может знать семантику XML (то есть, что может быть несколько классов, но в этом случае только один). 1001 *

Боюсь, по моему опыту, конвертеры c от XML до JSON довольно бесполезны. Чтобы получить полезный вывод, вам всегда нужно выполнить некоторую предварительную или постобработку, которая учитывает семантику модели данных.

Вот почему XSLT 3.0 не пытается обобщенного преобразования c, скорее это дает вам инструменты для реализации вашего собственного преобразования.

0 голосов
/ 22 апреля 2020

Вы можете использовать Декларативное потоковое сопоставление (DSM) Библиотека анализа потока. Он может обрабатывать как JSON, так и XML. Прежде всего, вы должны определить ваше отображение в формате yaml или json.

Вот пример отображения для вашего образца XML:

result:
  path: /
  type: object
  fields:
    School:
      type: object
      fields:         
        Class: 
          type: array

Рабочий пример приведен ниже ссылка.

https://repl.it/@MehmetFatihFat3 / DSMConvertXMLtoJSONArrayOneElement

...