Я видел довольно много неуклюжего кода XML-> JSON в Интернете, и, немного пообщавшись с пользователями Stack, я убежден, что эта толпа может помочь больше, чем первые несколько страниц результатов Google.
Итак, мы разбираем фид погоды, и нам нужно заполнить виджеты погоды на множестве веб-сайтов. Сейчас мы ищем решения на основе Python.
Этот общедоступный RSS-канал weather.com является хорошим примером того, что мы будем анализировать ( наш реальный канал weather.com содержит дополнительную информацию благодаря партнерству с ними ).
В двух словах, как мы должны конвертировать XML в JSON, используя Python?
xmltodict (полное раскрытие: я написал) может помочь вам преобразовать ваш XML в структуру dict + list + string, следуя этому «стандарту» . Это Экспат на , поэтому он очень быстрый и не требует загрузки всего дерева XML в память.
Получив эту структуру данных, вы можете сериализовать ее в JSON:
источник
bs4
может сделать работу XML в Словаре чрезвычайно прост в использовании библиотекиВы можете использовать библиотеку xmljson для преобразования с использованием различных соглашений XML JSON .
Например, этот XML:
переводится через соглашение BadgerFish в это:
и через соглашение GData в это (атрибуты не поддерживаются):
... и через соглашение Паркера в это (атрибуты не поддерживаются):
Можно конвертировать из XML в JSON и из JSON в XML, используя те же соглашения:
Раскрытие: я написал эту библиотеку. Надеюсь, это поможет будущим искателям.
источник
Если через какое-то время вы получите только код ответа вместо всех данных, то появится ошибка типа json parse , поэтому вам нужно преобразовать ее в текст
источник
Для тех, кто еще может нуждаться в этом. Вот новый, простой код для этого преобразования.
источник
Вот код, который я построил для этого. Там нет разбора содержимого, просто преобразование.
источник
Существует метод для транспортировки разметки на основе XML в виде JSON, который позволяет преобразовать ее без потерь обратно в исходную форму. Смотрите http://jsonml.org/ .
Это своего рода XSLT из JSON. Я надеюсь, что вы найдете это полезным
источник
Возможно, вы захотите взглянуть на http://designtheory.org/library/extrep/designdb-1.0.pdf . Этот проект начинается с преобразования XML в JSON большой библиотеки файлов XML. Было проведено много исследований в области преобразования, и было создано самое простое интуитивно понятное отображение XML -> JSON (оно описано в начале документа). Таким образом, преобразуйте все в объект JSON и поместите повторяющиеся блоки в список объектов.
объекты, означающие пары ключ / значение (словарь в Python, hashmap в Java, объект в JavaScript)
Нет возврата к XML для получения идентичного документа, причина в том, что неизвестно, была ли пара ключ / значение атрибутом или
<key>value</key>
, следовательно, эта информация потеряна.Если вы спросите меня, атрибуты - это взлом для начала; с другой стороны, они хорошо работали для HTML.
источник
Ну, наверное, самый простой способ - просто разобрать XML в словари и затем сериализовать это с simplejson.
источник
Я бы предложил не идти на прямое обращение. Преобразуйте XML в объект, затем из объекта в JSON.
На мой взгляд, это дает более четкое определение того, как соотносятся XML и JSON.
Требуется время, чтобы разобраться, и вы можете даже написать инструменты, которые помогут вам с генерацией некоторых из них, но это будет выглядеть примерно так:
источник
Я нашел для простых фрагментов XML, использование регулярных выражений избавит от проблем. Например:
Чтобы сделать это путем синтаксического анализа XML, как сказал @Dan, не существует единого для всех решения, поскольку данные отличаются. Мое предложение состоит в том, чтобы использовать lxml. Lxml.objectify, хотя и не завершено для json, дает хорошие результаты:
источник
Хотя встроенные библиотеки для разбора XML довольно хороши, я неравнодушен к lxml .
Но для разбора RSS-каналов я бы порекомендовал Universal Feed Parser , который также может анализировать Atom. Его главное преимущество заключается в том, что он может переваривать даже самые плохо сформированные корма.
Python 2.6 уже включает в себя парсер JSON, но более новая версия с улучшенной скоростью доступна как simplejson .
С этими инструментами создание вашего приложения не должно быть таким сложным.
источник
Мой ответ касается конкретного (и несколько распространенного) случая, когда вам на самом деле не нужно конвертировать весь XML в JSON, но вам нужно перебрать / получить доступ к определенным частям XML, и вам нужно, чтобы он был быстрым , и просто (используя json / dict-подобные операции).
Подходить
Для этого важно отметить, что синтаксический анализ xml с использованием etree
lxml
выполняется очень быстро. Медленная часть в большинстве других ответов - это второй проход: обход структуры etree (обычно в python-land), преобразование ее в json.Что приводит меня к подходу, который я нашел наилучшим для этого случая: анализ xml с использованием
lxml
, а затем обертывание узлов etree (лениво), предоставляя им dict-подобный интерфейс.Код
Вот код:
Эта реализация не завершена, например, она не поддерживает чисто случаи, когда элемент имеет как текст, так и атрибуты, или как текст, так и дочерние элементы (только потому, что он мне не нужен, когда я его пишу ...) Это должно быть легко чтобы улучшить его, хотя.
скорость
В моем конкретном случае использования, когда мне нужно было обрабатывать только определенные элементы xml, этот подход дал удивительное и поразительное ускорение в 70 (!) Раз по сравнению с использованием xmltodict @Martin Blech и последующим обходом диктата напрямую.
бонус
В качестве бонуса, поскольку наша структура уже похожа на диктовку, мы получаем другую альтернативную реализацию
xml2json
бесплатно. Нам просто нужно передать нашу подобную диктату структуруjson.dumps
. Что-то вроде:Если ваш xml содержит атрибуты, вам нужно использовать буквенно-цифровые
attr_prefix
символы (например, «ATTR_»), чтобы ключи были действительными ключами json.Я не тестировал эту часть.
источник
json.dumps(tree)
это сделать, то объект типа «ETreeDictWrapper» не будет сериализуем в формате JSONКогда я делаю что-нибудь с XML в python, я почти всегда использую пакет lxml. Я подозреваю, что большинство людей используют lxml. Вы можете использовать xmltodict, но вам придется заплатить штраф за повторный анализ XML.
Чтобы преобразовать XML в JSON с помощью LXML вы:
Я использую следующий класс в своих проектах. Используйте метод toJson.
Выход из встроенной магистрали :
Что является преобразованием этого XML:
источник
jsonpickle или, если вы используете feedparser, вы можете попробовать feed_parser_to_json.py
источник
Этот материал активно поддерживается и пока мой любимый: xml2json в python
источник
проверить lxml2json (раскрытие: я написал это)
https://github.com/rparelius/lxml2json
это очень быстро, легко (требуется только lxml), и одним из преимуществ является то, что вы можете контролировать, преобразуются ли определенные элементы в списки или в диктовки
источник
Вы можете использовать declxml. Он имеет расширенные функции, такие как множественные атрибуты и сложную вложенную поддержку. Вам просто нужно написать простой процессор для него. Также с тем же кодом вы можете конвертировать обратно в JSON. Это довольно просто и документация потрясающая.
Ссылка: https://declxml.readthedocs.io/en/latest/index.html
источник
Подготовка данных в Python : Для создания JSON сначала вам необходимо подготовить данные в Python. Мы можем использовать List и Dictionary в Python для подготовки данных.
Список Python <==> Массив JSON
Словарь Python <==> Объект JSON (формат значения ключа) Проверьте это для более подробной информации
https://devstudioonline.com/article/create-json-and-xml-in-python
источник
Представлять данные в формате JSON
В json мы представляем данные в формате ключ и значение
Представлять данные в формате XML
источник