2011-06-24 15 views
6

मेरे पास एक एक्सएमएल फ़ाइल है जिसे मैं पायथन का उपयोग कर JSON फ़ाइल में कनवर्ट करना चाहता हूं, लेकिन यह मेरे लिए काम कर रहा है।मैं xml फ़ाइल को पायथन का उपयोग करके JSON में कैसे परिवर्तित कर सकता हूं?

<?xml version="1.0"?> 
<note> 
    <to>Tove</to> 
    <from>Jani</from> 
    <heading>Reminder</heading> 
    <body>Don't forget me this weekend!</body> 
</note> 

ऊपर एक्सएमएल फ़ाइल मैं ElementTree का उपयोग कर और यह दे रही है पार्स करने कर रहा हूँ इस तरह क्रमानुसार करने Simplejson रहे हैं:

from xml.etree import ElementTree as ET 
import simplejson 

tree = ET.parse(Xml_file_path) 
simplejson.dumps(tree) 

यह मुझे एक त्रुटि देता है: पर xml.etree.ElementTree.ElementTree वस्तु: लेखन त्रुटि 0x00C49DD0 JSON serializable नहीं है।

+1

आपको यह समझना होगा कि तत्व वृक्ष वस्तु XML फ़ाइल का पूर्ण प्रतिनिधित्व नहीं है, यह केवल आपके द्वारा इच्छित XML फ़ाइल के किसी भी हिस्से तक पहुंचने के तरीकों को प्रदान करती है। Xml2json मॉड्यूल का उपयोग करने का उत्तर आपकी आवश्यकताओं को पूरा करेगा। – razzmataz

उत्तर

7

यह शायद आप के लिए क्या देख रहे है:

https://github.com/mutaku/xml2json

import xml2json 

s = '''<?xml version="1.0"?> 
<note> 
    <to>Tove</to> 
    <from>Jani</from> 
    <heading>Reminder</heading> 
    <body>Don't forget me this weekend!</body> 
</note>''' 
print xml2json.xml2json(s) 
15

एक अन्य विकल्प xmltodict है (पूर्ण प्रकटीकरण: मैं इसे लिखा था)। यह "standard" के बाद, आपको अपने एक्सएमएल को एक dict + list + स्ट्रिंग स्ट्रक्चर में बदलने में मदद कर सकता है। यह Expat-आधारित है, इसलिए यह बहुत तेज है और पूरे XML पेड़ को स्मृति में लोड करने की आवश्यकता नहीं है।

एक बार जब आप उस डेटा संरचना है, तो आप यह JSON को क्रमानुसार कर सकते हैं:

import xmltodict, json 

o = xmltodict.parse('<e> <a>text</a> <a>text</a> </e>') 
json.dumps(o) # '{"e": {"a": ["text", "text"]}}' 
0

आप xmljson इस्तेमाल करने की कोशिश कर सकते हैं। इसके लिए कोड

from xmljson import badgerfish as bf 
from xml.etree.ElementTree import fromstring 
s = '''<?xml version="1.0"?> 
<note> 
    <to>Tove</to> 
    <from>Jani</from> 
    <heading>Reminder</heading> 
    <body>Don't forget me this weekend!</body> 
</note>''' 
json.dumps(bf.data(fromstring(s))) 
संबंधित मुद्दे

 संबंधित मुद्दे