Сопоставить xml с Json

Я хочу преобразовать XML в JSON. Пример: преобразовать приведенный ниже xml в указанный json.

<header>
<students>
<info>
    <name>student1</name>
    <class>2</class>
</info>
<info>
<name>student2</name>
<class>3</class>
</info>
</students>
</header>

JSON:

{
"header": {
    "students": [
        {
            "name": "student1",
            "class": "2"
        },
        {
            "name": "student2",
            "class": "3"
        }
    ]
}
}

Вопрос в том, как преобразовать элемент в массив?

Вы можете следить за этим novixys.com/blog/convert-xml-json.

jack jay 06.09.2018 08:15

Вы можете увидеть следующую ссылку stackoverflow.com/questions/1823264/…

shohan 06.09.2018 08:58

Используйте библиотеку XML для чтения XML и библиотеку JSON для записи JSON. Хотя существует множество инструментов, обещающих преобразование JSON / XML, они будут делать это, используя свои собственные соглашения. Если у вас есть собственная цель относительно того, каким должен быть результирующий JSON с учетом входного XML, тогда их соглашения не будут работать для вас, и вам просто нужно самостоятельно разрешить оба формата.

kumesana 06.09.2018 10:04

может кто подскажет решение с помощью xsl. Я пытался использовать тот, который указан по этой ссылке: bjelic.net/2012/08/01/coding/convert-xml-to-json-using-xslt. работает нормально. за исключением того, что он может обнаруживать массив xml только тогда, когда в массиве есть несколько элементов. Если в массиве есть только один элемент, при преобразовании в json он не рассматривается как массив

Susanna M 06.09.2018 11:40

Сообщите мне, работает ли мой отвечать для вас.

cassiomolin 06.09.2018 15:03
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
5
1 434
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Я попытался создать Джейсона из добавленной вами строки xml. использовал C# и смог получить файл Джейсона. Вам следует добавить в свой проект пакет nuget Newtonsoft.Json.

 public void xmlToJason()
    {
        string xml = @"<header>
                        <students>
                        <info>
                            <name>student1</name>
                            <class>2</class>
                        </info>
                        <info>
                        <name>student2</name>
                        <class>3</class>
                        </info>
                        </students>
                        </header>";

        XmlDocument doc = new XmlDocument();
        doc.LoadXml(xml);

        string json = JsonConvert.SerializeXmlNode(doc);

        Console.WriteLine(json);
    }

Это хорошо и все такое, но OP упоминает Java.

kumesana 06.09.2018 09:59

Вы можете использовать библиотеку org.json для преобразования строки xml в объект json.

Пример программы:

import org.json.me.JSONException;
import org.json.me.JSONObject;
import org.json.me.util.XML;

public class XmlToJson {

    public static void main(String args[]) throws JSONException
    {

        String sampleXML = "<COLLEGE><STUDENT><NAME>MACK</NAME><MARKS>90</MARKS></STUDENT><STUDENT><NAME>JACK</NAME><MARKS>82</MARKS></STUDENT></COLLEGE>";
        JSONObject jsonObject = new JSONObject(XML.toJSONObject(sampleXML).toString());
        System.out.println("XML: "+sampleXML);
        System.out.println("JSON: "+jsonObject);
    }

}

Пример вывода:

XML: <COLLEGE>
        <STUDENT>
           <NAME>MACK</NAME>
           <MARKS>90</MARKS>
        </STUDENT>
        <STUDENT>
           <NAME>JACK</NAME>
           <MARKS>82</MARKS>
        </STUDENT> 
     </COLLEGE>


JSON: {"COLLEGE": {
       "STUDENT": [
      {
        "MARKS": "90",
        "NAME": "MACK"
      },
      {
        "MARKS": "82",
        "NAME": "JACK"
      }
    ]
  }
}
Ответ принят как подходящий

Я сделал преобразование, используя xslt, предоставленный по ссылке: https://www.bjelic.net/2012/08/01/coding/convert-xml-to-json-using-xslt/

Проблема, с которой я столкнулся, заключалась в том, что этот xslt преобразует массив xml в массив json только при наличии нескольких элементов xml с тем же именем. Если в массиве есть только один элемент xml, он не преобразует его в массив JSON. Я решил это, отредактировав xsl, используя свое собственное условие, в котором я проверяю имя элемента массива, который мне нужен, и проверяю, равен ли счетчик нулю для того же самого, а затем добавляю '[' и ']' для этого условия.

Добавьте в свое приложение следующую зависимость:

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20180813</version>
</dependency>

Он предоставляет довольно простой способ конвертировать XML-документ в JSON-документ:

String xml = "<header>\n" +
             "  <students>\n" +
             "    <info>\n" +
             "      <name>student1</name>\n" +
             "      <class>2</class>\n" +
             "    </info>\n" +
             "    <info>\n" +
             "      <name>student2</name>\n" +
             "      <class>3</class>\n" +
             "    </info>\n" +
             "   </students>\n" +
             "</header>";

JSONObject json = XML.toJSONObject(xml);
System.out.println(json);

Результатом будет:

{"header":{"students":{"info":[{"name":"student1","class":2},{"name":"student2","class":3}]}}}

Затем можно произвести некоторые манипуляции:

JSONArray info = json.getJSONObject("header").getJSONObject("students").getJSONArray("info");
json.getJSONObject("header").put("students", info);
System.out.println(json);

И у вас будет желаемый результат:

{"header":{"students":[{"name":"student1","class":2},{"name":"student2","class":3}]}}

Другие вопросы по теме