Я не могу использовать XML напрямую из-за требований спецификации, но я согласен с вами. Спасибо!
BeachRunnerFred
@BeachRunnerJoe: какой импорт мне нужно написать? import net.sf.json.JSONObject;или import org.json.JSONObject;. Кроме того, какую банку мне нужно включить?
Предупреждение: пакет json.org.XML не существует в Android!
Людовик Ландри
2
@danieltalsky: Какой импорт мне нужно написать? import net.sf.json.JSONObject;или import org.json.JSONObject;. Кроме того, какую банку мне нужно включить?
Что делать, если у вас есть <test attrib="moretest" content="foo">bar</test>?
wchargin
1
ПРИМЕЧАНИЕ: XML.toJSONObject () org.json также правильно преобразует списки xml в массивы json (в отличие от XmlMapper Джексона, который по умолчанию молча глотает).
Агостон Хорват
58
Чтобы преобразовать XML-файл в JSON, включите следующую зависимость
используйте версию json, упомянутую в посте, если вы работаете на Java 7, поскольку последняя версия выдает странные ошибки.
Уруг
Если у вас есть действительный файл dtd для фрагмента xml, то вы можете легко конвертировать xml в json и json в xml, используя jar ссылки затмения с открытым исходным кодом. Подробный пример проекта JAVA можно найти здесь: cubicrace.com/2015/06/How-to-convert-XML-to-JSON-format.html
Пиюш Чордия
Мне пришлось скопировать весь пакет JSON в мой проект и переименовать пакет. Добавление в Gradle выдает предупреждение о дублировании пакета с Android во время сборки.
codelearner
28
Единственная проблема с JSON в Java заключается в том, что если у вашего XML есть единственный дочерний элемент, но он является массивом, он преобразует его в объект, а не в массив. Это может вызвать проблемы, если вы динамически всегда конвертируете из XML в JSON, где, если ваш пример XML имеет только один элемент, вы возвращаете объект, но если он имеет 2+, вы возвращаете массив, что может вызвать проблемы с синтаксическим анализом для людей, использующих JSON.
Класс XML2JSON в Infoscoop имеет способ помечать элементы, которые являются массивами, перед выполнением преобразования, чтобы массивы можно было правильно отображать, даже если в XML есть только один дочерний элемент.
Вот пример его использования (на немного другом языке, но вы также можете увидеть, как массивы используются из метода nodelist2json () ссылки XML2JSON).
мы используем библиотеку "xml-to-json" в python, и это семантическая проблема. Для решения этой проблемы «массив или объект» мы пишем метод tryConvertToArray (), который возвращает массив с единственным объектом в нем. Таким образом, вы всегда можете доверять своему значению быть массивом
kommradHomer
Мне не ясно, как это решает проблему. Вы просто делаете все массивом, а не объектом? Например, если у меня есть XML <results><result><value>1</value></result></results>, будет ли он генерировать { "results" : { "result" : { "value" : "1" } } } или { "results" : [ { "result" : { "value" : "1" } } ] }
Маркус
Мы ожидаем, что это будет массив. Проблема возникает, когда этот массив имеет только 1 элемент, что делает его объектом для конвертера xml-в-json. Итак, поскольку мы ожидаем, что это будет массив даже для одного элемента, мы проверяем и конвертируем его в массив, следя за тем, чтобы у нас был массив, в котором мы ожидаем массив.
kommradHomer
Но как вы ожидаете, что конкретный элемент будет массивом? XML2JSON помечает элементы. Непонятно, как ожидать, что это будет массив, не помечая его, так как иначе вы бы никогда не узнали с одним элементом «массив».
Маркус
Например, есть элемент под названием «номера телефонов». И есть 1 или более элементов «номер телефона» в элементе «номер телефона». Поэтому, когда в «phonenumbers» есть только один элемент «phonenumber», xml2json создает объект phonenumber, но я создаю массив phonenumber и помещаю в него объект phonenumber.
Я не знаю, в чем именно ваша проблема, но если вы получаете XML и хотите вернуть JSON (или что-то еще), вы также можете посмотреть на JAX-B. Это стандарт для маршаллинга / демаршаллинга Java POJO в XML и / или Json. Есть несколько библиотек, которые реализуют JAX-B, например Cache Apache.
import net.sf.json.JSONObject;
илиimport org.json.JSONObject;
. Кроме того, какую банку мне нужно включить?Ответы:
JSON в Java имеет несколько замечательных ресурсов.
Maven зависимость:
XML.java
класс, который вы ищете:Выход:
источник
import net.sf.json.JSONObject;
илиimport org.json.JSONObject;
. Кроме того, какую банку мне нужно включить?<test attrib="moretest" content="foo">bar</test>
?Чтобы преобразовать XML-файл в JSON, включите следующую зависимость
и вы можете скачать Jar из репозитория Maven здесь . Затем реализовать как:
источник
Единственная проблема с JSON в Java заключается в том, что если у вашего XML есть единственный дочерний элемент, но он является массивом, он преобразует его в объект, а не в массив. Это может вызвать проблемы, если вы динамически всегда конвертируете из XML в JSON, где, если ваш пример XML имеет только один элемент, вы возвращаете объект, но если он имеет 2+, вы возвращаете массив, что может вызвать проблемы с синтаксическим анализом для людей, использующих JSON.
Класс XML2JSON в Infoscoop имеет способ помечать элементы, которые являются массивами, перед выполнением преобразования, чтобы массивы можно было правильно отображать, даже если в XML есть только один дочерний элемент.
Вот пример его использования (на немного другом языке, но вы также можете увидеть, как массивы используются из метода nodelist2json () ссылки XML2JSON).
источник
<results><result><value>1</value></result></results>
, будет ли он генерировать{ "results" : { "result" : { "value" : "1" } } }
или{ "results" : [ { "result" : { "value" : "1" } } ] }
Я загрузил проект, который вы можете напрямую открыть в Eclipse и запустить, вот и все https://github.com/pareshmutha/XMLToJsonConverterUsingJAVA
Спасибо
источник
Я нашел это быстрый и простой способ: Используется:
org.json.XML
класс из java-json.jarисточник
Я не знаю, в чем именно ваша проблема, но если вы получаете XML и хотите вернуть JSON (или что-то еще), вы также можете посмотреть на JAX-B. Это стандарт для маршаллинга / демаршаллинга Java POJO в XML и / или Json. Есть несколько библиотек, которые реализуют JAX-B, например Cache Apache.
источник