Saya telah melihat bagian yang adil dari kode JSON XML -> fungainly di web, dan telah sedikit berinteraksi dengan pengguna Stack, saya yakin bahwa kerumunan ini dapat membantu lebih dari beberapa halaman pertama hasil Google.
Jadi, kami menguraikan umpan cuaca, dan kami perlu mengisi widget cuaca di banyak situs web. Kami sedang mencari solusi berbasis Python.
Umpan RSS weather.com publik ini adalah contoh yang baik dari apa yang akan kami uraikan (feed weather.com kami yang sebenarnya berisi informasi tambahan karena kemitraan dengan mereka ).
Singkatnya, bagaimana kita mengkonversi XML ke JSON menggunakan Python?
xmltodict (pengungkapan penuh: saya menulisnya) dapat membantu Anda mengonversi XML Anda menjadi struktur daftar + string + dict, mengikuti "standar" ini . Itu adalah Expat berbasis, sehingga sangat cepat dan tidak perlu memuat pohon XML keseluruhan dalam memori.
Setelah Anda memiliki struktur data itu, Anda bisa membuat cerita bersambung menjadi JSON:
sumber
bs4
dapat melakukan pekerjaan xml untuk mendiktkan, sangat mudah untuk menggunakan perpustakaanAnda bisa menggunakan pustaka xmljson untuk mengonversi menggunakan konvensi XML JSON yang berbeda .
Misalnya, XML ini:
diterjemahkan melalui konvensi BadgerFish ke dalam ini:
dan melalui konvensi GData ke ini (atribut tidak didukung):
... dan melalui konvensi Parker ke dalam ini (atribut tidak didukung):
Dimungkinkan untuk mengonversi dari XML ke JSON dan dari JSON ke XML menggunakan konvensi yang sama:
Pengungkapan: Saya menulis perpustakaan ini. Semoga ini membantu pencari di masa depan.
sumber
Jika suatu saat Anda hanya mendapatkan kode respons alih-alih semua data maka kesalahan seperti json parse akan ada di sana sehingga Anda harus mengubahnya sebagai teks
sumber
Ini kode yang saya buat untuk itu. Tidak ada penguraian konten, hanya konversi biasa.
sumber
Ada metode untuk mengangkut markup berbasis XML sebagai JSON yang memungkinkannya dikonversi kembali ke bentuk aslinya. Lihat http://jsonml.org/ .
Ini semacam XSLT dari JSON. Saya harap Anda merasa terbantu
sumber
Untuk siapa saja yang mungkin masih membutuhkan ini. Ini kode baru yang lebih sederhana untuk melakukan konversi ini.
sumber
Anda mungkin ingin melihat http://designtheory.org/library/extrep/designdb-1.0.pdf . Proyek ini dimulai dengan konversi XML ke JSON dari perpustakaan besar file XML. Ada banyak penelitian yang dilakukan dalam konversi, dan XML -> pemetaan JSON intuitif paling sederhana diproduksi (dijelaskan di awal dokumen). Singkatnya, konversikan semuanya menjadi objek JSON, dan letakkan blok berulang sebagai daftar objek.
objek yang berarti pasangan kunci / nilai (kamus dengan Python, hashmap di Jawa, objek dalam JavaScript)
Tidak ada pemetaan kembali ke XML untuk mendapatkan dokumen yang identik, alasannya, tidak diketahui apakah pasangan kunci / nilai adalah atribut atau
<key>value</key>
, oleh karena itu informasi tersebut hilang.Jika Anda bertanya kepada saya, atribut adalah retas untuk memulai; sekali lagi mereka bekerja dengan baik untuk HTML.
sumber
Yah, mungkin cara paling sederhana adalah parsing XML ke dalam kamus dan kemudian serialkan dengan simplejson.
sumber
Saya sarankan tidak pergi untuk konversi langsung. Konversi XML ke objek, lalu dari objek ke JSON.
Menurut pendapat saya, ini memberikan definisi yang lebih bersih tentang bagaimana XML dan JSON sesuai.
Butuh waktu untuk memperbaiki dan Anda bahkan dapat menulis alat untuk membantu Anda menghasilkan beberapa, tetapi akan terlihat seperti ini:
sumber
Saya menemukan untuk snips XML sederhana, menggunakan ekspresi reguler akan menghemat masalah. Sebagai contoh:
Untuk melakukannya dengan parsing XML, seperti yang dikatakan @Dan, tidak ada solusi satu-untuk-semua karena datanya berbeda. Saran saya adalah menggunakan lxml. Meskipun belum selesai untuk json, lxml.objectify memberikan hasil yang bagus dan tenang:
sumber
Sementara built-in libs untuk parsing XML cukup bagus, saya sebagian ke lxml .
Tetapi untuk penguraian RSS feed, saya akan merekomendasikan Universal Feed Parser , yang juga dapat mengurai Atom. Keuntungan utamanya adalah dapat mencerna bahkan sebagian besar feed yang cacat.
Python 2.6 sudah menyertakan parser JSON, tetapi versi yang lebih baru dengan peningkatan kecepatan tersedia sebagai simplejson .
Dengan alat-alat ini membangun aplikasi Anda seharusnya tidak terlalu sulit.
sumber
Jawaban saya membahas kasus spesifik (dan agak umum) di mana Anda tidak benar-benar perlu mengubah seluruh xml menjadi json, tetapi yang Anda butuhkan adalah untuk melintasi / mengakses bagian-bagian tertentu dari xml, dan Anda perlu cepat , dan sederhana (menggunakan operasi json / dict-like).
Pendekatan
Untuk ini, penting untuk dicatat bahwa parsing xml untuk menggunakan etree
lxml
sangat cepat. Bagian lambat di sebagian besar jawaban lain adalah lintasan kedua: melintasi struktur etree (biasanya di python-land), mengubahnya menjadi json.Yang membawa saya ke pendekatan yang saya temukan terbaik untuk kasus ini: parsing menggunakan xml
lxml
, dan kemudian membungkus node etree (malas), menyediakan mereka dengan antarmuka seperti dict.Kode
Berikut kodenya:
Implementasi ini tidak lengkap, misalnya, tidak mendukung kasus di mana sebuah elemen memiliki teks dan atribut, atau teks dan anak-anak (hanya karena saya tidak membutuhkannya ketika saya menulisnya ...) Itu harus mudah untuk memperbaikinya.
Mempercepat
Dalam kasus penggunaan khusus saya, di mana saya hanya perlu memproses elemen-elemen spesifik xml, pendekatan ini memberikan speedup mengejutkan dan mencolok dengan faktor 70 (!) Dibandingkan dengan menggunakan xmltodict @Martin Blech dan kemudian menelusuri dict secara langsung.
Bonus
Sebagai bonus, karena struktur kami sudah seperti dict, kami mendapatkan implementasi alternatif lain
xml2json
secara gratis. Kita hanya perlu meneruskan struktur seperti dict kitajson.dumps
. Sesuatu seperti:Jika xml Anda menyertakan atribut, Anda harus menggunakan beberapa alfanumerik
attr_prefix
(mis. "ATTR_"), untuk memastikan kunci tersebut adalah kunci json yang valid.Saya belum membandingkan bagian ini.
sumber
json.dumps(tree)
itu mengatakan Objek ketik 'ETreeDictWrapper' bukan JSON serializableKetika saya melakukan sesuatu dengan XML di python saya hampir selalu menggunakan paket lxml. Saya curiga kebanyakan orang menggunakan lxml. Anda dapat menggunakan xmltodict tetapi Anda harus membayar penalti untuk mem-parsing XML lagi.
Untuk mengonversi XML ke json dengan lxml Anda:
Saya menggunakan kelas berikut dalam proyek saya. Gunakan metode toJson.
Output dari main built in adalah:
Yang merupakan transformasi dari xml ini:
sumber
jsonpickle atau jika Anda menggunakan feedparser, Anda dapat mencoba feed_parser_to_json.py
sumber
Barang-barang ini di sini dipelihara secara aktif dan sejauh ini adalah favorit saya: xml2json in python
sumber
lihat lxml2json (pengungkapan: Saya menulisnya)
https://github.com/rparelius/lxml2json
itu sangat cepat, ringan (hanya membutuhkan lxml), dan satu keuntungan adalah Anda memiliki kontrol atas apakah elemen tertentu dikonversi ke daftar atau dikte
sumber
Anda dapat menggunakan declxml. Ini memiliki fitur-fitur canggih seperti multi atribut dan dukungan bersarang yang kompleks. Anda hanya perlu menulis prosesor sederhana untuk itu. Juga dengan kode yang sama, Anda dapat mengonversi kembali ke JSON juga. Ini cukup mudah dan dokumentasinya luar biasa.
Tautan: https://declxml.readthedocs.io/en/latest/index.html
sumber
Mempersiapkan data dengan Python : Untuk membuat JSON, Anda harus menyiapkan data dengan python terlebih dahulu. Kita bisa menggunakan Daftar dan Kamus dengan Python untuk menyiapkan data.
Daftar Python <==> Array JSON
Kamus Python <==> Objek JSON (Format Nilai Kunci) Periksa ini untuk lebih jelasnya
https://devstudioonline.com/article/create-json-and-xml-in-python
sumber
Untuk mewakili data dalam format JSON
Di json kita merepresentasikan data dalam format kunci dan nilai
Untuk mewakili data dalam format XML
sumber