Самый быстрый способ конвертировать XML в JSON в Java

127

Какие хорошие инструменты для быстрого и простого преобразования XML в JSON в Java?

  • 0
    Я не могу использовать XML напрямую из-за требований спецификации, но я согласен с вами. Спасибо!
  • 0
    @BeachRunnerJoe: какой импорт мне нужно написать? import net.sf.json.JSONObject; или import org.json.JSONObject; , Кроме того, какую банку мне нужно включить?
Показать ещё 5 комментариев
Теги:

6 ответов

134

JSON в Java обладает некоторыми большими ресурсами.

Зависимость от Maven:

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

XML.java - это класс, который вы ищете:

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

public class Main {

    public static int PRETTY_PRINT_INDENT_FACTOR = 4;
    public static String TEST_XML_STRING =
        "<?xml version=\"1.0\" ?><test attrib=\"moretest\">Turn this to JSON</test>";

    public static void main(String[] args) {
        try {
            JSONObject xmlJSONObj = XML.toJSONObject(TEST_XML_STRING);
            String jsonPrettyPrintString = xmlJSONObj.toString(PRETTY_PRINT_INDENT_FACTOR);
            System.out.println(jsonPrettyPrintString);
        } catch (JSONException je) {
            System.out.println(je.toString());
        }
    }
}

Выход:

{"test": {
    "attrib": "moretest",
    "content": "Turn this to JSON"
}}
  • 14
    Предупреждение: пакет json.org.XML не существует в Android!
  • 2
    @danieltalsky: Какой импорт мне нужно написать? import net.sf.json.JSONObject; или import org.json.JSONObject; , Кроме того, какую банку мне нужно включить?
Показать ещё 10 комментариев
49

Чтобы преобразовать XML файл в JSON, включите следующую зависимость

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

и вы можете Загрузить Jar из репозитория Maven здесь. Затем выполните как:

String soapmessageString = "<xml>yourStringURLorFILE</xml>";
JSONObject soapDatainJsonObject = XML.toJSONObject(soapmessageString);
System.out.println(soapDatainJsonObject);
  • 5
    + для мавенской зависимости
  • 2
    используйте версию json, упомянутую в посте, если вы работаете на Java 7, так как последняя версия выдает странные ошибки.
Показать ещё 2 комментария
24

Единственная проблема с JSON в Java заключается в том, что если ваш XML имеет единственный дочерний элемент, но является массивом, он преобразует его в объект вместо массива. Это может вызвать проблемы, если вы динамически всегда конвертируете из XML в JSON, где, если в вашем примере XML есть только один элемент, вы возвращаете объект, но если он имеет 2+, вы возвращаете массив, что может вызвать проблемы с анализом для людей, использующих JSON.

Infoscoop XML2JSON класс имеет способ пометки элементов, которые являются массивами перед выполнением преобразования, так что массивы могут быть правильно отображены, даже если в XML есть только один ребенок.

Вот пример его использования (на немного отличающемся языке, но вы также можете видеть, как массивы используются из nodelist2json() метод ссылки XML2JSON).

  • 0
    мы используем библиотеку "xml-to-json" в python, и это семантическая проблема. Для решения этой проблемы «массив или объект» мы пишем метод tryConvertToArray (), который возвращает массив с единственным объектом в нем. Таким образом, вы всегда можете доверять своему значению быть массивом
  • 0
    Мне не ясно, как это решает проблему. Вы просто делаете все массивом, а не объектом? Например, если у меня есть XML <results><result><value>1</value></result></results> , будет ли он генерировать { "results" : { "result" : { "value" : "1" } } } или { "results" : [ { "result" : { "value" : "1" } } ] }
Показать ещё 8 комментариев
3

Я загрузил проект, который вы можете открыть в eclipse и запустить все это https://github.com/pareshmutha/XMLToJsonConverterUsingJAVA

Спасибо

2

Я не знаю, какова ваша конкретная проблема, но если вы получаете XML и хотите вернуть JSon (или что-то еще), вы также можете посмотреть JAX-B. Это стандарт для маршаллинга/развязывания Java POJO для XML и/или Json. Существует несколько библиотек, которые реализуют JAX-B, например Apache CXF.

1

Я нашел это быстрым и простым способом: Используется: класс org.json.XML из java-json.jar

        if (statusCode == 200 && inputStream != null) {
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
            StringBuilder responseStrBuilder = new StringBuilder();

            String inputStr;
            while ((inputStr = bufferedReader.readLine()) != null) {
                responseStrBuilder.append(inputStr);
            }

            jsonObject = XML.toJSONObject(responseStrBuilder.toString());
        }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню